我正在努力查询完全匹配。该字段在文档中的两个字段中相同,分别在_id和正文中的一个字段中。
因此我可以搜索这些字段中的任何一个。有什么方法可以配置术语查询以支持此操作?我尝试指定空白分析器,但似乎不是术语查询支持的配置。
我已经尝试了几种变体,但到目前为止都没有奏效。
data: {
query: {
term: {
"_id":"4123-0000"
}
}
}
这不返回任何内容
答案 0 :(得分:1)
问题是,当您使用默认映射时,您的_id
字段似乎已被您填充,该字段本来会使用text
字段,而该字段使用standard
分析器并拆分了令牌基于-
,因此您的_id
字段的标记如下:
POST / _analyze
{
"text" : "4123-0000",
"analyzer" : "standard"
}
和令牌
{
"tokens": [
{
"token": "4123",
"start_offset": 0,
"end_offset": 4,
"type": "<NUM>",
"position": 0
},
{
"token": "0000",
"start_offset": 5,
"end_offset": 9,
"type": "<NUM>",
"position": 1
}
]
}
现在您可能已经知道,没有对term
查询进行分析,即它按原样使用4123-0000
并尝试在反向索引中查找,该索引不可用,因此您不会得到任何结果。
解决方案,只需将_id
替换为_id.keyword
即可获得搜索结果。