ElasticSearch TermQuery在_id字段中查找子字符串

时间:2018-09-18 14:00:13

标签: java elasticsearch

在elasticsearch中,我有这样的数据:

  

_id:14133095_IMP
_id:54646546_OPS
....

我想找到所有包含IMP的ID。

这是我的地图

@Id
private String id;

这是我的查询

QueryBuilder query = QueryBuilders.boolQuery()
                .must(QueryBuilders.termsQuery("_id", "imp"))
                .must(QueryBuilders.termsQuery("sourceSystem", "smart"))
                .must(QueryBuilders.termsQuery("taskStatus", BpmConstants.ACTIVE_STATES.stream().map(Enum::name).collect(Collectors.toList())));

问题在于第一个必须子句。没有它会发现很多记录(包括没有_imp的记录)。我还想通过_id仅过滤包含IMP的记录。

1 个答案:

答案 0 :(得分:2)

elasticsearch中的

Term查询确实匹配,因此imp将不匹配14133095_IMP。您需要使用match查询来进行全文搜索。 您可以在

上阅读有关这些查询的更多信息。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html