在值中使用连字符的 Elastic、Term(或 _ID)查询
Elastic, Term (or _ID) query with Hyphen in value
我正在努力查询完全匹配。该字段在文档中的两个字段中相同,在 _id 内和在正文中的一个字段内。
所以我可以搜索这些字段中的任何一个。有没有办法配置术语查询来支持这个?我试过指定空白分析器,但它似乎不是术语查询的受支持配置。
我尝试了一些变体,但 none 目前为止它已经奏效了..
data: {
query: {
term: {
"_id":"4123-0000"
}
}
}
这return什么都没有
问题是,当您使用默认映射时,您的 _id
字段似乎由您填充,该字段本应使用 text
字段,而该字段使用 standard
分析器并拆分基于 -
的标记,因此您的 _id
字段标记如下:
POST/_分析
{
"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
即可得到搜索结果。
我正在努力查询完全匹配。该字段在文档中的两个字段中相同,在 _id 内和在正文中的一个字段内。
所以我可以搜索这些字段中的任何一个。有没有办法配置术语查询来支持这个?我试过指定空白分析器,但它似乎不是术语查询的受支持配置。
我尝试了一些变体,但 none 目前为止它已经奏效了..
data: {
query: {
term: {
"_id":"4123-0000"
}
}
}
这return什么都没有
问题是,当您使用默认映射时,您的 _id
字段似乎由您填充,该字段本应使用 text
字段,而该字段使用 standard
分析器并拆分基于 -
的标记,因此您的 _id
字段标记如下:
POST/_分析
{
"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
即可得到搜索结果。