如何使用 Elasticsearch Java API 创建通配符查询?

hel*_*one 6 elasticsearch

如何使用 Elasticsearch 创建通配符查询?我尝试了下面的方法,但我认为它不起作用(我的意思是它不过滤)。

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.wildcardQuery("message", "ANG*"));
Run Code Online (Sandbox Code Playgroud)

我也尝试过 prefixQuery 方法,但它也没有过滤任何结果。

boolQueryBuilder.must(QueryBuilders.prefixQuery("message", "ANG"));
Run Code Online (Sandbox Code Playgroud)

编辑:

        "_index": "log4j_2017",
        "_type": "log4j",
        "_id": "fd23123122",
        "_score": null,
        "_source": {
           "date": "2017-03-10T19:04:50.049Z",
           "contextStack": [],
           "level": "INFO",
           "marker": null,
           "thrown": null,
           "message": "ANGServlet 'spring': initialization completed in 2314 ms",
           "millis": 1489151090049,
           "contextMap": {},
           "threadName": "http-apr-8080-exec-77"
         }
Run Code Online (Sandbox Code Playgroud)

Val*_*Val 7

一个可能的原因是您的message字段被分析,并且在这种情况下标记以小写形式索引,因此您需要像这样搜索:

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.wildcardQuery("message", "ang*"));
Run Code Online (Sandbox Code Playgroud)

或者

boolQueryBuilder.must(QueryBuilders.prefixQuery("message", "ang"));
Run Code Online (Sandbox Code Playgroud)

  • 是的,当我使用小写字母时它有效。我想我需要创建一个新的映射。感谢您的帮助。 (2认同)