在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将创建两个标记landkreiscloppenburg同时创建索引和搜索时间,甚至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

回到顶部