Elasticsearch中Edge N Gram什么时候创建分析链

When is the analysis chain created for Edge N Gram in Elasticsearch

我试图找出哪个更适合增量搜索 - edge n gramm 或 completion suggester。到目前为止,我在 Internet 上读到的内容表明,对于完成建议器,数据处理是在创建索引时完成的,而对于边缘 n 克,它是在查询时完成的,因此它比完成建议器慢。然而,就在 Elasticsearch - The definitve guide 中,我读过这本书,对于 edge n gram 也是在索引时完成的。现在我真的很困惑,任何人都可以清楚地知道 edge n gram 在内部是有效的。

谢谢

两者都在索引时起作用,构建专用数据结构:

  • N gram 分词器生成分词:"hello world" 变为 "h"、"he"、"hel"..."worl"、"world"。使用通常的 "text"(又名 "string")映射类型。
  • completion suggester 生成图表:参见 https://www.elastic.co/blog/you-complete-me。此时,有一个特殊的映射类型"completion".

在搜索时,建议者更便宜:

  • N 克分词器:
    • 必须分析键入的文本,搜索到的结果词:搜索到的 "Hello Wor" 应分析为 "hello"+"wor" 并搜索这 2 个词。
    • 然而,应该从分析中删除 N gram 分词器(在搜索和索引之间使用不同的分析器):搜索 "Henry" 将被分析 "h"、"he"、"hen", "henr"... 并且会 return "hello" 因为它们共享相同的前缀 "he".
  • 完成建议更简单、更快捷。如果您尝试在用户在键盘上键入时自动完成搜索,性能很重要。

在这两种情况下,您都可以使用自定义分析链(法语、德语、soundex...):

  • N克:
    • 编写时间:自定义分析+边缘ngram+类型"text"
    • 阅读时间:自定义分析+截断+搜索API
  • 完成
    • 写时间:自定义分析+打字"completion"
    • 阅读时间:自定义分析+建议API