如何使用 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)
一个可能的原因是您的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)
| 归档时间: |
|
| 查看次数: |
11402 次 |
| 最近记录: |