如果我想用TermQuery来执行keyword搜索,正确的方法是什么?我应该在我的字段名前面加上".keyword"吗?我认为有一个更好的公民方法来做它!🤷♂️
TermQuery
".keyword"
QueryBuilders.termQuery(SOME_FIELD_NAME + ".keyword", someValue)
yzuktlbb1#
这一切都归结为你的Map。如果你的字段被Map为一个“简单的”keyword,就像这样
keyword
{ "mappings": { "properties": { "some_field": { "type": "keyword" } } } }
您不需要附加.keyword-您只需要
.keyword
QueryBuilders.termQuery(SOME_FIELD_NAME, someValue)
不过,不要把自己限制在keyword上,这是一个很好的做法,特别是如果你要做部分匹配、扩展、自动完成等。典型的text字段Map如下所示
text
PUT kwds { "mappings": { "properties": { "some_field": { "type": "text", "fields": { "keyword": { <--- "type": "keyword" }, "analyzed": { <--- "type": "text", "analyzer": "simple" }, "...": { <--- ... } } } } } }
这意味着你可以访问同一个“属性”(字段)的不同索引的“版本”(字段)。长话短说,这就是.keyword约定的起源。如果您的字段已经Map为keyword,则不需要它。
1条答案
按热度按时间yzuktlbb1#
这一切都归结为你的Map。如果你的字段被Map为一个“简单的”
keyword
,就像这样您不需要附加
.keyword
-您只需要不过,不要把自己限制在
keyword
上,这是一个很好的做法,特别是如果你要做部分匹配、扩展、自动完成等。典型的
text
字段Map如下所示这意味着你可以访问同一个“属性”(字段)的不同索引的“版本”(字段)。
长话短说,这就是
.keyword
约定的起源。如果您的字段已经Map为keyword
,则不需要它。