在弹性搜索中使用模糊查询时找到实际匹配的单词

Yog*_*tri 5 lucene fuzzy-search elasticsearch

我是Elasticsearch的新手,一直在寻找模糊查询搜索。
我用这样的对象/记录值制作了新的索引产品

{
            "_index": "products",
            "_type": "product",
            "_id": "10",
            "_score": 1,
            "_source": {
                "value": [
                    "Ipad",
                    "Apple",
                    "Air",
                    "32 GB"
                ]
            }
        }
Run Code Online (Sandbox Code Playgroud)

现在当我在elasticsearch中执行模糊查询搜索时

{
   query: {
       fuzzy: {
          value: "tpad"
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

它会返回给我期望的正确记录(上面刚刚制成的产品)。
而且我知道该术语tpad匹配,ipad因此记录已归还。
但是从技术上讲,我怎么知道它已经匹配了ipad。弹性搜索仅返回完整记录,像这样

{
"took": 4,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 1,
    "max_score": 0.61489093,
    "hits": [
        {
            "_index": "products",
            "_type": "product",
            "_id": "10",
            "_score": 0.61489093,
            "_source": {
                "value": [
                    "Ipad",
                    "Apple",
                    "Air",
                    "32 GB"
                ]
            }
        }
    ]
}
}
Run Code Online (Sandbox Code Playgroud)

是否有弹性搜索任何方式,这样我可以知道,如果它匹配了tpad反对ipad

Oll*_*ank 4

如果您使用突出显示,Elasticsearch 将显示匹配的术语:

curl -XGET http://localhost:9200/products/product/_search?pretty -d '{
  "query" : {
    "fuzzy" : {
        "value" : "tpad"
      }
  },
  "highlight": {
    "fields" : {
        "value" : {}
    }
  }
}'
Run Code Online (Sandbox Code Playgroud)

Elasticsearch 将返回匹配的文档,并突出显示片段:

{
  "took" : 31,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 0.13424811,
    "hits" : [ {
      "_index" : "products",
      "_type" : "product",
      "_id" : "10",
      "_score" : 0.13424811,
      "_source":{
 "value" : ["Ipad",
                "Apple",
                "Air",
                "32 GB"
                ]
           },
      "highlight" : {
        "value" : [ "<em>Ipad</em>" ]
      }
    } ]
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 是否有可能以相反的方式做到这一点?我想知道“tpad”(来自我的查询字符串)是否匹配——而不是知道“ipad”(来自文档)是否匹配。 (3认同)
  • @ankr 你的问题得到答案了吗?我也在寻找一些有关不匹配单词的信息,但到目前为止,我什么也没找到。 (2认同)