在elasticsearch中的字符串数组中搜索精确字段
嗨,我做了很多尝试,但是在索引中找不到任何解决方案,我有一个包含字符串的字段。
因此,例如,我有两个文档,它们在locations数组中包含不同的值。
"doc" : { "locations" : [
"Cloppenburg",
"Berlin"
]
}
"doc" : { "locations" : [
"Landkreis Cloppenburg",
"Berlin"
]
}
用户请求搜索术语 而我只想返回那些包含术语 而不是
文档。结果应仅包含 。但是我的查询返回了两个文档。
我正在使用以下查询,并同时获取两个文档。有人可以帮我吗
GET /my_index/_search {
"query": {
"bool": {
"must": [
{
"match": {
"doc.locations": {
"query": "cloppenburg",
"operator": "and"
}
}
}
]
}
}
}
回答:
问题是由于您正在使用该text
字段和match
查询。
对匹配查询进行分析,并使用与索引时使用的搜索词相同的分析器,对于字段,这是标准分析器text
。在您的情况下,如果在空白处打断文本,Landkreis
Cloppenburg将创建两个标记landkreis
,cloppenburg
同时创建索引和搜索时间,甚至cloppenburg
匹配文档。
解决方案:使用keyword field
。
{ "mappings": {
"properties": {
"location": {
"type": "keyword"
}
}
}
}
为两个文档建立索引,然后使用相同的搜索查询
{ "query": {
"bool": {
"must": [
{
"match": {
"location": {
"query": "Cloppenburg"
}
}
}
]
}
}
}
"hits": [ {
"_index": "location",
"_type": "_doc",
"_id": "2",
"_score": 0.6931471,
"_source": {
"location": "Cloppenburg"
}
}
]
以上是 在elasticsearch中的字符串数组中搜索精确字段 的全部内容, 来源链接: utcz.com/qa/435255.html