elasticsearch 执行关键字搜索的正确方法是什么?

bprjcwpo  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(201)

如果我想用TermQuery来执行keyword搜索,正确的方法是什么?我应该在我的字段名前面加上".keyword"吗?我认为有一个更好的公民方法来做它!🤷‍♂️

QueryBuilders.termQuery(SOME_FIELD_NAME + ".keyword", someValue)
yzuktlbb

yzuktlbb1#

这一切都归结为你的Map。如果你的字段被Map为一个“简单的”keyword,就像这样

{
  "mappings": {
    "properties": {
      "some_field": {
        "type": "keyword"
      }
    }
  }
}

您不需要附加.keyword-您只需要

QueryBuilders.termQuery(SOME_FIELD_NAME, someValue)

不过,不要把自己限制在keyword上,这是一个很好的做法,特别是如果你要做部分匹配、扩展、自动完成等。
典型的text字段Map如下所示

PUT kwds
{
  "mappings": {
    "properties": {
      "some_field": {
        "type": "text",
        "fields": {
          "keyword": {          <---
            "type": "keyword"
          },
          "analyzed": {         <---
            "type": "text",
            "analyzer": "simple"
          },
          "...": {              <---
             ...
          }
        }
      }
    }
  }
}

这意味着你可以访问同一个“属性”(字段)的不同索引的“版本”(字段)。
长话短说,这就是.keyword约定的起源。如果您的字段已经Map为keyword,则不需要它。

相关问题