gpt4 book ai didi

elasticsearch - 与Elasticsearch中的IN运算符完全匹配

转载 作者:行者123 更新时间:2023-12-03 01:35:14 25 4
gpt4 key购买 nike

如何使用IN操作查找多个文本值的精确匹配?例如。,

SELECT * WHERE name in ('george','michael') AND testID in (1,2)

当我尝试在查询下运行时,它会返回用于匹配值的额外数据,例如“ the george ”,而不是确切值,仅返回“ george
{  
"query":{
"bool":{
"filter":[
{
"query_string":{
"fields":[
"name"
],
"query":"george or michael"
}
},
{
"terms":{
"testID":[1,2]
}
}
]
}
}
}

最佳答案

这是因为您的字段nametext类型。

当数据类型为text时,Elasticsearch会将值(例如The GeorgeGeorge Washington分解为 token [the, george][george, washington],并将这些 token 保存在倒排索引中。因此,当您使用自己的查询在此字段上进行搜索时,它还将返回这些文档,即你说不完全匹配。

对于完全匹配,我建议您使用keyword规范化器来使用lowercase类型,如以下映射中所述:

PUT <your_index_name>
{
"settings":{
"analysis":{
"normalizer":{
"my_custom_normalizer":{
"type":"custom",
"filter":[
"lowercase"
]
}
}
}
},
"mappings":{
"mydocs":{
"properties":{
"name":{
"type":"keyword",
"normalizer":"my_custom_normalizer"
}
}
}
}
}

这样,您的值将按原样保存。根据上述映射,它将 The GeorgeGeorge Washington转换为 the georgegeorge washtingon,然后将它们按原样存储在倒排索引中。

您可能会得到您提到的查询,然后按预期工作。

希望能帮助到你!

关于elasticsearch - 与Elasticsearch中的IN运算符完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142130/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com