0

我一直在阅读,ElasticSearch但找不到有关如何执行以下操作的答案:

假设您有一些标题中包含“study”的记录,并且用户使用“study”一词而不是“study”。你会如何设置ElasticSearch来匹配这个?

谢谢,亚历克斯

ps:对不起,如果这是重复的。不知道要搜索什么!

4

2 回答 2

3

您可能对此感兴趣:http ://www.elasticsearch.org/guide/reference/query-dsl/flt-query/

例如:我已经索引了书名,并且在这个查询中:

{
  "query": {
    "bool": {
      "must": [
        {
          "fuzzy": {
            "book": {
              "value": "ringing",
              "min_similarity": "0.3"
            }
          }
        }
      ]
    }
  }
}

我有

{
  "took" : "1",
  "timed_out" : "false",
  "_shards" : {
    "total" : "5",
    "successful" : "5",
    "failed" : "0"
  }
  "hits" : {
    "total" : "1",
    "max_score" : "0.19178301",
    "hits" : [
      {
        "_index" : "library",
        "_type" : "book",
        "_id" : "3",
        "_score" : "0.19178301",
        "_source" : {
          "book" : "The Lord of the Rings",
          "author" : "J R R Tolkein"
        }
      }
    ]
  }
}

这是唯一正确的结果..

于 2013-05-23T17:47:41.020 回答
2

您可以将词干应用于您的文档,这样当您索引时studying,您就处于索引之下study。当您查询时,您会执行相同的操作,因此当您studying再次搜索时,您将搜索study并且您会找到匹配项,都在寻找studystudying

词干当然取决于语言,并且有不同的技术,对于英语滚雪球就可以了。发生的情况是,在索引数据时会丢失一些信息,因为如您所见,您无法真正区分学习和学习。如果您想保持这种区别,您可以使用multi_field以不同方式索引相同的文本并对其应用不同的文本分析。这样,您可以搜索多个字段,包括非词干版本和词干版本,可能会赋予它们不同的权重。

于 2013-05-23T20:40:54.993 回答