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

时间:2014-04-14 18:57:00

标签: elasticsearch

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

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

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

THX 马克

1 个答案:

答案 0 :(得分:4)

这是一个分析器和过滤器,可以帮助您入门。很难涵盖所有案例,但asciifolding过滤器将解决您使用François与Francois 案件的问题。

在下面的示例中,它将保留原始内容,以便对François和Francois的查询将解析为相同的结果集。

        "analyzer": {
            "name_analyzer": {
                "type": "custom",
                "tokenizer": "standard",
                "filter": [
                    "lowercase",
                    "trim",
                    "my_ascii_folding"
                ]
            }
        },
        "filter": {
            "my_ascii_folding" : {
                "type" : "asciifolding",
                "preserve_original" : true
            }
        }

Source

通过定义同义词过滤器,您可以在您的语言中定义一个通常相似的名称列表(例如,在您的同义词文件中可能是François => Francois这样的行),这将在短期内完成。

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

像...一样的东西。

        "char_filter": {
            "ae_char_filter": {
                "type": "pattern_replace",
                "pattern": "([A-Za-z]+)ae([A-Za-z]+)",
                "replacement": "$1a$2"
            }
        }

即使 Peter de Langhe与Peter delange 也可以使用pattern_replace char过滤器解决:

        "char_filter": {
            "de_char_filter": {
                "type": "pattern_replace",
                "pattern": "([A-Za-z]+) de ([A-Za-z]+)",
                "replacement": "$1 de$2"
            }
        }