弹性搜索。如何结合快速搜索实现以下原则?
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"
]
]
],
我需要使用以下原则示例(全部一起)搜索该字段:
索引字符串 - “monkeys”。我需要找到这个文档by"猴子".
索引字符串 - “你好我美丽的世界”。我需要有可能 找到 这个文档 by “你好大世界”。
- 索引字符串 - “适当”。我需要有可能 找到 这个文档 by “apropriat”。
总体: 已编入索引 - "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 发行版中包含两个俄语词干分析器,russian
和 light_russian
,listed 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. 您最终可能会 运行 completion
和 phrase
个建议的组合来涵盖您的所有基础。
我的映射是:
"current_name" => [
"type" => "string",
"index" => "analyzed",
"analyzer" => "russian",
"fields" => [
"raw" => [
"type" => "string",
"index" => "not_analyzed"
],
"raw_lowercase" => [
"type" => "string",
"analyzer" => "tolowercase"
]
]
],
我需要使用以下原则示例(全部一起)搜索该字段:
索引字符串 - “monkeys”。我需要找到这个文档by"猴子".
索引字符串 - “你好我美丽的世界”。我需要有可能 找到 这个文档 by “你好大世界”。
- 索引字符串 - “适当”。我需要有可能 找到 这个文档 by “apropriat”。
总体: 已编入索引 - "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 发行版中包含两个俄语词干分析器,russian
和 light_russian
,listed 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. 您最终可能会 运行 completion
和 phrase
个建议的组合来涵盖您的所有基础。