使用完整的建议和德语分析器进行搜索

时间:2018-03-02 07:54:20

标签: elasticsearch elasticsearch-5

我创建了一个带有建议字段和完成类型的简单索引。我索引了一些城市名称。对于建议字段,我使用德国分析仪。

PUT city_de
{
  "mappings": {
    "city" : {
      "properties": {
        "name" : {
          "type": "text",
          "analyzer": "german"
        },
        "suggest" : {
          "type": "completion",
          "analyzer": "german"
        }
      }
    }
  }
}

分析仪工作正常,使用变音符号搜索效果很好。自动完成也是完美的。但是我通过搜索wie这个词来面对一个问题。

假设我有两个文档WiesbadenWien,其名称与建议完成期限相同。

如果我搜索wie,我认为城市WienWiesbaden都在回复中。但不幸的是,我没有得到回应。我认为由于德国分析仪,wie有限制。因为如果我搜索wiwies,我会收到有效回复。

同样适用于术语wasersieund,它们看起来像德语中的词汇。

如果我搜索wiewas,是否需要任何其他配置才能获得结果?

谢谢!

1 个答案:

答案 0 :(得分:2)

问题

按前缀

搜索城市名称

"魏"应该找到" Wien"或"威斯巴登"

可能的解决方法

对于用例,我建议使用edge n-gram https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.htmlASCII foldinghttps://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-asciifolding-tokenfilter.html

实施例

wien
token   position    start offset    end offset
w   0   0   1
wi  1   0   2
wie 2   0   3
wien    3   0   4



wiesbaden
token   position    start offset    end offset
w   0   0   1
wi  1   0   2
wie 2   0   3
wies    3   0   4
...
wiesbaden   8   0   9

请记住,系统现在必须以非对称方式工作。不应该分析查询(使用关键字),但必须分析索引中的数据。

有两种方法可以实现这一目标: 1.)添加查询分析器以使用查询 2.)将查询分析器绑定到字段

"cities": {
        "type": "text",
        "fields": {
          "autocomplete": {
            "type": "text",
            "analyzer": "autocomplete_analyzer", <-- index time analyzer
            "search_analyzer": "autocomplete_search" <-- search time analyzer
          }
        }
      }

为什么德国分析仪无法正常工作

该分析仪专为德语文本设计,使用简单的算法去除弯曲和形态。 https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#german-analyzer 以下是此标记生成器生成的典型术语的示例

Hallo hier ist der Text über Wiesbaden und Wien. Es scheint angebracht über Wände und Wandern zu sprechen. 

hallo   0   0   5
text    4   19  23
wiesbad 6   29  38
wien    8   43  47
scheint 10  52  59
angebracht  11  60  70
wand    13  76  81
wandern 15  86  93
sprech

如果它适用于城市名称,这只是巧合。