代码之家  ›  专栏  ›  技术社区  ›  Martin Čuka

elasticsearch termquery在id字段中查找子字符串

  •  0
  • Martin Čuka  · 技术社区  · 7 年前

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

    _编号:14133095
    _ ID:54646546_操作

    我想找到所有包含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())));
    

    问题在于first must子句。没有它会发现很多记录(包括那些没有IMP的记录)。我还希望只按包含IMP的记录筛选记录。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Peeyush    7 年前

    Term ElasticSearch中的查询完全匹配,因此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