首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索- search_analyzer vs index_analyzer

弹性搜索- search_analyzer vs index_analyzer
EN

Stack Overflow用户
提问于 2013-04-10 10:37:26
回答 2查看 29.4K关注 0票数 48

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

我不明白有不同的搜索和索引分析器的部分。第二个自定义映射示例如下所示:

->the索引分析器是一个edgeNgram

->the搜索分析器是:

代码语言:javascript
复制
"full_name":{
    "filter":[
        "standard",
        "lowercase",
        "asciifolding"
    ],
    "type":"custom",
    "tokenizer":"standard"
}

如果我们希望查询"Race“不返回结果,比如*ra*pport和*rac*ial (由于edgeNgram ),那么为什么首先用edgeNgram来索引它呢?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-10 17:47:53

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

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

对于部分匹配,可以用边ngram索引,这样"elasticsearch“就会变成(使用mingram 3和maxgram 20):

"ela“、"elas”、"elast“、”弹性海“、”弹性“、"eleasticsearc”和"elasticsearch“

现在让我们查询创建的字段。如果我们查询“弹性”这个术语,就会得到一个匹配的结果,并得到预期的结果。我们基本上把上面所说的部分匹配变成了一个精确的匹配,考虑到我们索引的内容。也没有必要将ngram应用于查询。如果我们这样做了,我们将查询以下所有术语:

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

这将使查询更加复杂,也会导致奇怪的结果。假设您在另一个文档中索引了术语“”,相同的字段。你会有以下几个问题:

"ela“、"elap”、“elap”、

如果您搜索“弹性”并对查询生成ngram,术语"ela“也将与第二个文档相匹配,因此您将把它与第一个文档一起使用,即使没有一个术语包含您所要寻找的整个”弹性“术语。

我建议你看看analyze api,看看不同的分析器及其不同的结果。

票数 104
EN

Stack Overflow用户

发布于 2014-11-13 21:52:37

引用the official documentation about index vs search analyzers

偶尔,在索引和搜索时间使用不同的分析器是有意义的。例如,在索引时,我们可能希望索引同义词,例如,对于每一次出现的快速,我们也索引快速,快速。但是在搜索的时候,我们不需要搜索所有这些同义词。相反,我们只需查找用户输入的单个单词,无论是快速、快速、快速还是快速。 为了实现这种区别,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的分析器,默认为
  • 标准分析器
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15923480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档