我正在使用ElasticSearch搜索数据。我的数据包含文本字段,当我尝试匹配输入的查询时,它将输出带有另一个字符串的输入。
_mapping
"direction": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
弹性数据
[
{
direction: "North"
},
{
direction: "North East"
}
]
查询
{
match: {
"direction" : {
query: "North",
operator : "and"
}
}
}
结果
[
{
direction: "North"
},
{
direction: "North East"
}
]
预期结果
[
{
direction: "North"
}
]
注意:它应该输出完全匹配的方向
答案 0 :(得分:1)
您可能要查看Term Queries
数据类型上使用的keyword
,以执行精确匹配搜索。
POST <your_index_name>/_search
{
"query": {
"term": {
"direction.keyword": {
"value": "North"
}
}
}
}
观察到的结果是因为您正在使用Text
在Match Query
字段中进行查询。文本字段的值分解为令牌,然后将其存储在反向索引中。此过程称为Analysis
。 文本字段不用于完全匹配。
还要注意,无论您在Match Query
中提到的单词/标记,在执行之前,它们都将经历分析阶段。
希望有帮助!
答案 1 :(得分:1)
根据您的映射,如果要完全匹配,则不应在字段direction
上搜索,而应在direction.keyword
上搜索。字段direction
的类型为text
并被分析-在您的情况下为单词north
和east
。
答案 2 :(得分:0)
尝试一下 {“ query”:{“ bool”:{“ must”:{“ term”:{“ direction”:“ North”}}}}}