术语查询不会被分析,并且意味着您发送的任何内容都将被用于匹配倒排索引中的标记,而匹配查询会被分析并且相同的分析器应用于字段,该分析器在索引时使用并相应地匹配文档.
阅读有关术语查询和匹配查询的更多信息。如匹配查询中所述:
返回与提供的文本、数字、日期或布尔值匹配的文档。在匹配之前分析提供的文本。
您还可以使用分析 API查看为特定字段生成的令牌。
standard analyzer
由on52527.J1KND-H
文本生成的标记。
POST /_analyze
{
"text": "52527.J1KND-H",
"analyzer" : "standard"
}
{
"tokens": [
{
"token": "52527",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
},
{
"token": "j1knd",
"start_offset": 6,
"end_offset": 11,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "h",
"start_offset": 12,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 2
}
]
}
上面向您解释了为什么您也得到了不完全匹配的partnumbers
结果,例如:“52527.J1KND-H”,我将以您的示例以及如何使其工作。
索引映射
{
"mappings": {
"properties": {
"partnumber": {
"type": "text",
"fields": {
"raw": {
"type": "keyword" --> note this
}
}
}
}
}
}
索引文档
{
"partnumber" : "j1knd"
}
{
"partnumber" : "52527.J1KND-H"
}
搜索查询以仅返回完全匹配
{
"query": {
"bool": {
"filter": [
{
"term": {
"partnumber.raw": "j1knd" --> note `.raw` in field
}
}
]
}
}
结果
"hits": [
{
"_index": "so_match_term",
"_type": "_doc",
"_id": "2",
"_score": 0.0,
"_source": {
"partnumber": "j1knd"
}
}
]
}