在词干搜索上匹配查询内部 - 弹性

时间:2015-08-19 19:18:18

标签: elasticsearch

给出以下查询:

 match: {"title": "proportions"}

对于使用词干分析器标题字段分析的文档:

Doc 1 title: proportion

Doc 2 title: proportions

将返回两份文件。

在内部执行查询,如下所示:

"bool":{
      "should": [{"term" : {"title" : "proportions}}]

 }

如果是,那么匹配根词"比例"发生?我试图了解管道中根词的匹配位置。

1 个答案:

答案 0 :(得分:1)

实际上,这不是内部执行查询的方式。 onCreateif (number % 2 == 0) { System.out.println("Even"); } else { System.out.println("Odd"); } 查询在某些方面有所不同,但最重要的一点是,Term查询会在反向索引中搜索确切的指定查询文本,而Match查询则使用查询分析查询文本字段使用的分析器,然后使用这些值来搜索反向索引。

让我们看看一个例子,使用英语词干分析器。

我制作了一个名为my_analyzer(like in the docs)的英语词干分析器:

Term

接下来,我为我的词干分析器定义一个映射,只需要一个名为Match的简单字段:

PUT
{
   "settings": {
      "analysis": {
         "analyzer": {
            "my_analyzer": {
                "type":"custom",
               "tokenizer": "whitespace",
               "filter": [
                  "my_stemmer"
               ]
            }
         },
         "filter": {
            "my_stemmer": {
               "type": "stemmer",
               "name": "english"
            }
         }
      }
   }
}

现在,让我们索引两个文档,

value

当我们执行以下查询时,您认为会发生什么?仅供参考,您可以更改"比例"这里是"比例"为了相同的结果。

PUT _mapping/test
{
     "properties": {
        "value": {
           "type": "string",
           "analyzer": "my_analyzer"
        }
     }
}

没有结果。这很重要,因为我们直接在倒排索引中搜索"比例",然后变空。这实际上是因为单词"比例"或"比例"不在我们的倒排索引中。那里有什么?让我们看看:

PUT{"value":"proportion"}
PUT{"value":"proportions"}

索引中只有单词"query": { "bool": { "should": [{ "term": {"value": {"value": "proportion"}} }] } } "hits": { "total": 0, "max_score": null, "hits": [] } 。如果您修改上面的bool查询以使用文本"tokens": [ { "token": "proport", "start_offset": 0, "end_offset": 11, "type": "word", "position": 1 } ] ,那么您将获得两个文档。当您使用匹配查询时,如下所示:

proport

你实际上跑了#34;比例"通过词干分析器,匹配查询在你的倒排索引中搜索"比例",得到这些结果:

proport

TLDR:术语查询完全反映您在倒排索引中给出的内容,匹配查询在倒排索引中查找分析的输出