弹性搜索。如何结合快速搜索实现以下原则?

Elasticsearch. How to realize the following principles combining it with quick search?

我的映射是:

"current_name" => [
    "type"     => "string",
    "index"    => "analyzed",
    "analyzer" => "russian",
    "fields"   => [
        "raw"           => [
            "type"  => "string",
            "index" => "not_analyzed"
        ],
        "raw_lowercase" => [
            "type"     => "string",
            "analyzer" => "tolowercase"
        ]
    ]
],

我需要使用以下原则示例(全部一起)搜索该字段:

  1. 索引字符串 - “monkeys”。我需要找到这个文档by"猴子".

  2. 索引字符串 - “你好我美丽的世界”。我需要有可能 找到 这个文档 by你好大世界”。

  3. 索引字符串 - “适当”。我需要有可能 找到 这个文档 byapropriat”。

总体: 已编入索引 - "the Earth planet is the most beautiful in our Solar system"。我想通过 "earth is beautifal".

查找此文档

所有这些原则都应在用户输入查询时应用 - 快速搜索。语言是俄语。

可选:1) 索引 - “干得好”。我想找到文档通过近义词" ”。 2) 索引 - "beautiful world" 通过 "beaut worl"

查找

我怎样才能实现描述?您对将这些原则与快速搜索相结合有何看法?

自动建议注意事项

  • 搜索者希望自动建议具有高度响应性。如果您的任何一项宽大建议功能成本 >100ms,考虑将其从自动提示中移出并移至搜索中 结果。
  • Autosuggest 有助于确认搜索者正朝着正确的方向前进。对于您描述和实施的每个新的宽松建议功能,请注意引入的 坏建议 与好的建议的比例。由于可用于自动建议的屏幕空间有限,精确而不是全面通常更好。

完成您要求的策略

1) Indexed string - "monkeys". I need to find this document by "monkey".

这是词干提取 或将术语的常见词形变化简化为词根形式的示例。

例如,将"fitted"、"fitting"、"fits"、"fit"的输入映射到一个通用的形式,"fit" .

索引词和查询词都必须进行词干提取,这样搜索任何词形变化都会产生包含任何其他词形变化的结果。

在 Elasticsearch 发行版中包含两个俄语词干分析器,russianlight_russianlisted here (follow links to implementation descriptions)

任何建议器实现都可以使用自定义分析器进行参数化。默认情况下,他们使用映射中为建议的字段定义的分析器。

2) Indexed string - "hello my beautiful world". I need to have possibility to find this document by "hello big world"

一个解决方案就是布尔搜索hello OR my OR beautiful OR world。 Elasticsearch match 查询的实现默认为布尔值,并且会根据短语 "hello my beautiful world" 执行您描述的操作(假设 "hello" 和 "world" 是由搜索字段的分析器生成的标记)

另一种解决方案尝试是使用 the phrase suggester 将查询中的匹配项拼凑在一起。 (max_errors >= 0.5,因此术语 my beautiful 可被视为拼写错误。)

3) Indexed string - "appropriate". I need to have possibility to find this document by "apropriat".

您描述的是模糊搜索。此搜索在术语拼写方面提供 1-2 个字符的宽大处理,肯定会帮助长期拼写错误的人和打字不力的人。

completion suggester (which only needs a word prefix to provide suggestions), and the term suggester(仅根据输入的完整术语建议)都能够在 "edit distance" 之间指定 模糊性 或宽大查询和字段值。

Overall: Indexed - "the Earth planet is the most beautiful in our Solar system". I want to find this document by "earth is beautifal".

Optional: 1) Indexed - "great job". I want to find the document by synonim word "good". 2) Indexed - "beautiful world" find by "beaut worl"

(总体)给定键入的短语 "earth is beautifal",短语建议器可能无法建议 "the Earth planet is the most beautiful in our Solar system"。这是因为源文档中有许多不相关的术语将 "earth" 和 "beautiful" 分开。 A phrase search, with slop 设置为允许,比如四个项的间隙(如示例中所示)将满足此解决方案。但是您必须在完成逻辑中执行(较慢的)搜索请求。

(可选 1)Synonyms are discussed here,并且可以包含在您的分析器中。 尽管如此,我会对此进行彻底的拆分测试,因为搜索者可能不希望在他们的建议中看到同义词。

(可选 1)我怀疑完成建议者是否会完成多个术语,例如 "beaut worl" you may have to use edge-ngrams然而,实际上,我怀疑有人会输入这个,即使是不小心。


Multiple suggester types can be requested within a _suggest call. 您最终可能会 运行 completionphrase 个建议的组合来涵盖您的所有基础。