您可以基于语言分析器创建自定义分析器。唯一的区别是您将
ngram_filter令牌过滤器添加到链的末尾。在这种情况下,您首先会获得语言梗阻的令牌(默认链),这些令牌最终会转换为边缘ngram(您的过滤器)。您可以在这里https://www.elastic.co/guide/zh-
cn/elasticsearch/reference/current/analysis-lang-analyzer.html#english-
analyzer中找到语言分析器的实现,以覆盖它们。这是英语更改的示例:
{ "settings": { "analysis": { "analyzer": { "english_ngram": { "type": "custom", "filter": [ "english_possessive_stemmer", "lowercase", "english_stop", "english_stemmer", "ngram_filter" ], "tokenizer": "standard" } }, "filter": { "english_stop": { "type": "stop" }, "english_stemmer": { "type": "stemmer", "language": "english" }, "english_possessive_stemmer": { "type": "stemmer", "language": "possessive_english" }, "ngram_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 25 } } } }}更新
要支持特殊字符,您可以尝试使用
whitespace标记符代替
standard。在这种情况下,这些字符将成为令牌的一部分:
{ "settings": { "analysis": { "analyzer": { "english_ngram": { "type": "custom", "filter": [ "english_possessive_stemmer", "lowercase", "english_stop", "english_stemmer", "ngram_filter" ], "tokenizer": "whitespace" } }, "filter": { "english_stop": { "type": "stop" }, "english_stemmer": { "type": "stemmer", "language": "english" }, "english_possessive_stemmer": { "type": "stemmer", "language": "possessive_english" }, "ngram_filter": { "type": "edge_ngram", "min_gram": 1, "max_gram": 25 } } } }}


