0

我的映射是:

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

我需要使用以下原则示例(一起)搜索该领域:

  1. 索引字符串 - “猴子”。我需要通过猴子”找到这份文件。

  2. 索引字符串 - “你好,我美丽的世界”。我需要有可能通过hello big world ”找到这个文件。

  3. 索引字符串 - “适当的”。我需要有可能通过apropriat ”找到这份文件。

总体:已编入索引-“地球行星是我们太阳系中最美丽的行星”。我想通过“地球是美丽的”找到这个文件。

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

可选:1)索引 - “伟大的工作”。我想通过同义词“好”来查找文档。2) 索引 - 由“beaut worl”找到的“美丽世界”

我怎样才能实现描述?您对将这些原则与快速搜索结合起来有何评论?

4

1 回答 1

1

自动建议注意事项

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

完成您所要求的策略

1) 索引字符串 - “猴子”。我需要通过“猴子”找到这个文件。

这是一个将术语的常见变形词干或减少到词根形式的示例。

例如,将“fitted”、“fitted”、“fits”、“fit”的输入全部映射到通用形式“fit”。

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

在 Elasticsearch 发行版中包含两个俄罗斯词干分析器,并russian此处列出(点击链接到实现描述)light_russian

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

2) 索引字符串 - “你好,我美丽的世界”。我需要有可能通过“hello big world”找到这个文件

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

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

3) 索引字符串 - “适当的”。我需要有可能通过“apropriat”找到这份文件。

您正在描述模糊搜索。这种搜索在一个术语的拼写中提供了 1-2 个宽大的字符,并且肯定会帮助长期拼写错误和打字不佳的人。

完成建议者(只需要一个词前缀来提供建议)和术语建议者(仅基于输入的整个术语提出建议)都能够在查询和字段值。

总体:已编入索引-“地球行星是我们太阳系中最美丽的行星”。我想通过“地球是美丽的”找到这个文件。

可选:1)索引 - “伟大的工作”。我想通过同义词“好”来查找文档。2) 索引 - 由“beaut worl”找到的“美丽世界”

(总体)鉴于键入的短语“地球是美丽的”,短语建议者可能无法建议“地球行星是我们太阳系中最美丽的星球”。这是因为源文档中有许多不相关的术语将“地球”和“美丽”分开。 一个短语搜索,设置 slop 以允许四个词的间隙(如示例中所示),将满足此解决方案。但是您必须在完成逻辑中执行(较慢的)搜索请求。

(可选 1)这里讨论了同义词,并且可以包含在您的分析器中。不过,我会彻底对此进行拆分测试,因为搜索者可能不希望在他们的建议中看到同义词。

(可选 1)我怀疑完成建议器会完成多个术语,例如“beaut worl” ,您可能必须使用 edge-ngrams然而,实际上,我怀疑有人会输入这个,即使是偶然的。


可以在_suggest呼叫中请求多种建议者类型。 您最终可能会使用组合completionphrase建议器来覆盖您的所有基础。

于 2015-12-15T05:19:00.700 回答