执行关键字搜索的正确方法是什么?
What's the right way to perform a keyword search?
如果我想执行 keyword search using a TermQuery
,正确的方法是什么?我应该在我的字段名称前加上 ".keyword"
吗?我认为有一种更优先 class 公民的方式来做这件事! ♂️
QueryBuilders.termQuery(SOME_FIELD_NAME + ".keyword", someValue)
这一切都归结为您的映射。如果您的字段被映射为 'straightforward' keyword
像这样
{
"mappings": {
"properties": {
"some_field": {
"type": "keyword"
}
}
}
}
您不需要附加 .keyword
-- 您只需
QueryBuilders.termQuery(SOME_FIELD_NAME, someValue)
不过,最好不要将自己局限于 keyword
s,尤其是。如果您要进行部分匹配、扩展、自动完成等。
典型的 text
字段映射看起来像
PUT kwds
{
"mappings": {
"properties": {
"some_field": {
"type": "text",
"fields": {
"keyword": { <---
"type": "keyword"
},
"analyzed": { <---
"type": "text",
"analyzer": "simple"
},
"...": { <---
...
}
}
}
}
}
}
这意味着您将能够访问同一 "property"(字段)的不同索引的 "versions"(字段)。命名相当混乱,但您明白了要点。
长话短说,这就是 .keyword
约定的来源。如果您的字段已经映射为 keyword
.
,则不需要它
如果我想执行 keyword search using a TermQuery
,正确的方法是什么?我应该在我的字段名称前加上 ".keyword"
吗?我认为有一种更优先 class 公民的方式来做这件事! ♂️
QueryBuilders.termQuery(SOME_FIELD_NAME + ".keyword", someValue)
这一切都归结为您的映射。如果您的字段被映射为 'straightforward' keyword
像这样
{
"mappings": {
"properties": {
"some_field": {
"type": "keyword"
}
}
}
}
您不需要附加 .keyword
-- 您只需
QueryBuilders.termQuery(SOME_FIELD_NAME, someValue)
不过,最好不要将自己局限于 keyword
s,尤其是。如果您要进行部分匹配、扩展、自动完成等。
典型的 text
字段映射看起来像
PUT kwds
{
"mappings": {
"properties": {
"some_field": {
"type": "text",
"fields": {
"keyword": { <---
"type": "keyword"
},
"analyzed": { <---
"type": "text",
"analyzer": "simple"
},
"...": { <---
...
}
}
}
}
}
}
这意味着您将能够访问同一 "property"(字段)的不同索引的 "versions"(字段)。命名相当混乱,但您明白了要点。
长话短说,这就是 .keyword
约定的来源。如果您的字段已经映射为 keyword
.