0

我想对弹性进行完全匹配查询,这里是数据:

{
  "organizationId": "ec1c691a4b43e65aebdb2ab9481",
  "organizationName": "工業區"
}

如果我使用此代码

QueryBuilder QueryBuilder = QueryBuilders.termQuery("organizationName","工");

它会得到数据,但这是不合理的

我尝试了以下2个代码

QueryBuilder QueryBuilder = QueryBuilders.matchPhraseQuery("organizationName","工業");
QueryBuilder QueryBuilder = QueryBuilders.matchPhraseQuery("organizationName","業區");

两者都返回数据,但不完全匹配

谁能帮忙!Tks

4

1 回答 1

1

关于术语查询的 ElasticSearch 文档:

避免对文本字段使用术语查询。

默认情况下,Elasticsearch 会在分析过程中更改文本字段的值。这会使查找文本字段值的精确匹配变得困难。

要搜索文本字段值,请改用匹配查询。

匹配查询是执行全文搜索的标准查询,包括模糊匹配选项。

因此,在您的示例中,我将执行以下操作以获得完全匹配的行为

QueryBuilders.matchQuery("organizationName", "工業區")

如果只查询部分名称,如工业或业区,ElasticSearch 不会返回结果。

于 2020-02-06T22:38:44.863 回答