47

我正在查看 解释 ElasticSearch 分析器的http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ 。

我不明白有关拥有不同搜索和索引分析器的部分。自定义映射的第二个示例如下:
-> 索引分析器是一个 edgeNgram
-> 搜索分析器是:

"full_name":{
    "filter":[
        "standard",
        "lowercase",
        "asciifolding"
    ],
    "type":"custom",
    "tokenizer":"standard"
}

如果我们希望查询“Race”由于 edgeNgram 而不会返回像 * ra *pport 和 * rac *ial 这样的结果,为什么首先要使用 edgeNgram 来索引它呢?

请举例说明不同的分析器是有用的。

4

2 回答 2

100

您通常在索引时和查询时都有相似的分析链。相似并不意味着完全相同,但通常索引文档的方式反映了查询它们的方式。

不过,ngrams 示例非常适合,因为它是您在索引和查询时使用不同分析器的主要原因之一。

对于部分匹配,您使用边缘 ngram 进行索引,因此“elasticsearch”变为(使用 mingram 3 和 maxgram 20):

“ela”、“elas”、“elast”、“elasti”、“elastic”、“elastics”、“elasticse”、“elasticsea”、“elasticsear”、“elasticsearc”和“elasticsearch”

现在让我们查询创建的字段。如果我们查询“弹性”一词,就会有一个匹配项,我们会得到预期的结果。考虑到我们索引的内容,我们基本上使我们在上面所说的部分匹配成为完全匹配。也不需要将 ngrams 应用于查询。如果我们这样做,我们将查询以下所有术语:

“ela”、“elas”、“elast”、“elasti”和“弹性”

这会使查询方式更加复杂,也会导致得到奇怪的结果。假设您在另一个文档的同一字段中索引术语“elapsed”。您将拥有以下 ngram:

“ela”、“elap”、“elaps”、“elapse”、“elapsed”

如果您搜索“elastic”并对查询进行 ngram,则术语“ela”也将与第二个文档匹配,因此即使没有任何术语包含您的整个“弹性”术语,您也会将其与第一个文档一起取回正在寻找。

我建议您看一下分析 api,以使用不同的分析器及其不同的结果。

于 2013-04-10T17:47:53.100 回答
12

要参考有关索引与搜索分析器的官方文档

有时,在索引和搜索时使用不同的分析器是有意义的。例如,在索引时,我们可能想要索引同义词,例如,对于每次出现的 quick 我们也索引 fast、rapid 和 speedy。但是在搜索时,我们不需要搜索所有这些同义词。相反,我们可以只查找用户输入的单个单词,无论是 quick、fast、rapid 还是 speedy。

为了实现这种区分,Elasticsearch 还支持 index_analyzer 和 search_analyzer 参数,以及名为 default_index 和 default_search 的分析器。

考虑到这些额外的参数,索引时的完整序列看起来像这样:

  • 字段映射中定义的 index_analyzer,否则
  • 字段映射中定义的分析器,否则
  • 在文档的 _analyzer 字段中定义的分析器,否则
  • 类型的默认 index_analyzer,默认为
  • 类型的默认分析器,默认为
  • 索引设置中名为 default_index 的分析器,默认为
  • 索引设置中名为 default 的分析器,默认为
  • 在节点级别名为 default_index 的分析器,默认为
  • 在节点级别名为 default 的分析器,默认为
  • 标准分析仪

在搜索时:

  • 查询本身中定义的分析器,否则
  • 字段映射中定义的 search_analyzer,否则
  • 字段映射中定义的分析器,否则
  • 类型的默认 search_analyzer,默认为
  • 类型的默认分析器,默认为
  • 索引设置中名为 default_search 的分析器,默认为
  • 索引设置中名为 default 的分析器,默认为
  • 在节点级别名为 default_search 的分析器,默认为
  • 在节点级别名为 default 的分析器,默认为
  • 标准分析仪
于 2014-11-13T21:52:37.287 回答