我正在使用fuzzy
并希望弹性搜索返回搜索到的单词,而不仅仅是匹配。
当我在搜索dogo
这个词时,我的模糊搜索找到了dog
这个词,我想知道它是dogo
找到了它。
数据:
{ "index": { "_id":1 }}
{ "title": "The quick brown fox", "price":5 }
{ "index": { "_id":2 }}
{ "title": "The quick blue dog", "price":7 }
{ "index": { "_id":3 }}
{ "title": "The slow brown dog", "price":5 }
查询:
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"title": "dogo"
}
},
{
"fuzzy": {
"title": "fox"
}
}
]
}
},
"highlight" : {
"fields" : {
"title":{
"pre_tags": [
"===>"
],
"post_tags": [
"<==="
],
"fragment_size": 200,
"number_of_fragments": 100
}
}
}
}
此查询将返回===>dog<===
,但不知道dogo
是否找到了它。
有谁知道如何做到这一点或想法?
我希望我的输出类似于dog : dogo
。
答案 0 :(得分:4)
您可以通过为每个查询指定一个名称来使用named queries。在结果中,每个匹配都会显示一个matched_queries
数组,其中包含匹配的查询的名称(例如,下面的dogo
和fox
)。
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"name": {
"value": "dogo",
"_name": "dogo"
}
}
},
{
"fuzzy": {
"name": {
"value": "fox",
"_name": "fox"
}
}
}
]
}
},
"highlight": {
"fields": {
"title": {
"pre_tags": [
"===>"
],
"post_tags": [
"<==="
],
"fragment_size": 200,
"number_of_fragments": 100
}
}
}
}
答案 1 :(得分:1)
命名查询是了解结果中查询名称的正确选择。如果您想知道查询字词的可能更正条款,也可以尝试建议。
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"title": "dogo"
}
},
{
"fuzzy": {
"title": "fox"
}
}
]
}
},
"highlight" : {
"fields" : {
"title":{
"pre_tags": [
"===>"
],
"post_tags": [
"<==="
],
"fragment_size": 200,
"number_of_fragments": 100
}
}
} ,
"suggest" : {
"title_suggestion" : {
"text" : "fox dogo",
"term" : {
"field" : "title"
}
}
}
}