ElasticSearch搜索查询处理

时间:2013-05-23 16:52:13

标签: elasticsearch

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

说,你有一些记录,标题中有“学习”,用户使用“学习”一词而不是“学习”。您如何设置ElasticSearch以匹配此内容?

谢谢, 亚历

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

2 个答案:

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

这是唯一正确的结果..

答案 1 :(得分:2)

您可以将词干应用于您的文档,这样当您对studying编制索引时,您就会将study编入索引。当您查询时也会这样做,以便当您再次搜索studying时,您将搜索study并找到匹配项,同时查找studystudying

词干当然取决于语言,并且有不同的技巧,因为英语snowball很好。当您索引数据时,您会丢失一些信息,因为您可以看到您无法真正区分学习和学习。如果要保持这种区别,可以使用multi_field以不同方式为同一文本编制索引,并对其应用不同的文本分析。这样你可以搜索多个字段,包括非词干版本和词干版本,可能会给它们赋予不同的权重。

相关问题