在弹性搜索中推荐的人名称分析器/过滤器是什么

cyc*_*arc 9 elasticsearch

我想知道是否有建议使用分析仪/过滤器来索引/搜索人名.

可能造成困难的名称示例:

  • 马克与马克
  • Peter de Langhe与Peter delange对比
  • Verhaeven与Verhaven
  • 弗朗索瓦与弗朗索瓦

马克斯

dan*_*yim 4

这是一个可以帮助您入门的分析器和过滤器。很难涵盖所有案例,但过滤器可以解决Fran\xc3\xa7ois 与 Francoisasciifolding案例的问题。

\n\n

在下面的示例中,它将保留原始数据,以便对 Fran\xc3\xa7ois 和 Francois 的查询将解析为相同的结果集。

\n\n
        "analyzer": {\n            "name_analyzer": {\n                "type": "custom",\n                "tokenizer": "standard",\n                "filter": [\n                    "lowercase",\n                    "trim",\n                    "my_ascii_folding"\n                ]\n            }\n        },\n        "filter": {\n            "my_ascii_folding" : {\n                "type" : "asciifolding",\n                "preserve_original" : true\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

来源

\n\n

通过定义同义词过滤器,您可以在您的语言中定义一个通常相似的名称列表(Fran\xc3\xa7ois => Francois例如,可能是同义词文件中的一行),这将在短期内发挥作用。

\n\n

最后,pattern_replace带有模式的字符过滤器"([A-Za-z]+)ae([A-Za-z]+)" => "$1a$2"可以将所有内容Verhaeven变成Verhaven

\n\n

就像是...

\n\n
        "char_filter": {\n            "ae_char_filter": {\n                "type": "pattern_replace",\n                "pattern": "([A-Za-z]+)ae([A-Za-z]+)",\n                "replacement": "$1a$2"\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

甚至Peter de Langhe 与 Peter delange 的对比也可以通过 char 过滤器来解决pattern_replace

\n\n
        "char_filter": {\n            "de_char_filter": {\n                "type": "pattern_replace",\n                "pattern": "([A-Za-z]+) de ([A-Za-z]+)",\n                "replacement": "$1 de$2"\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n