Elasticsearch返回搜索词

时间:2017-08-25 08:35:52

标签: python elasticsearch

我正在使用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

2 个答案:

答案 0 :(得分: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
      }
    }
  }
}

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