2017-08-25 101 views
3

我正在使用fuzzy并希望elasticsearch返回搜索到的单词,而不仅仅是搜索结果。 当我搜索单词dogo和我的模糊搜索发现字dog我想知道它是dogo谁找到它。Elasticsearch返回搜索词

数据:

{ "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

回答

4

您可以使用named queries为此,为每个查询命名。在结果中,每个匹配将包含一个matched_queries数组,其中包含匹配查询的名称(例如,下面的dogofox)。

{ 
    "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 
     } 
    } 
    } 
} 
+0

真棒,很高兴它帮助! – Val

+0

非常感谢:) – kemis

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" 
     } 
    } 
    } 
}