在Elasticsearch 7.3及更高版本中,定制分词器(Analyzer)是一项核心功能,允许你根据项目特定的需求对文本进行精细化处理。定制分词器通常包括以下几个步骤:
-
定义分词流程:
分词器由三个主要组件组成:Tokenizer
(标记器)、Token Filter
(标记过滤器)和Char Filter
(字符过滤器)。标记器负责将文本分割成词汇单元(tokens),标记过滤器进一步处理这些tokens(比如去除停用词、转换为小写、同义词替换等),而字符过滤器则在标记器之前操作,用于预处理文本(如HTML实体转码、特殊字符移除等)。 -
配置分词器:
在Elasticsearch的索引设置(settings)或映射(mappings)中定义自定义分词器。例如,在索引设置中:PUT my_index { "settings": { "analysis": { "analyzer": { "my_custom_analyzer": { "tokenizer": "my_tokenizer", "char_filter": ["html_strip"], "filter": ["lowercase", "my_stopwords"] } }, "tokenizer": { "my_tokenizer": { "type": "nGram", // 假设使用n-gram标记器 "min_gram": 2, "max_gram": 10 } }, "filter": { "my_stopwords": { "type": "stop", "stopwords": ["a", "an", "the"] // 自定义停用词列表 } } } } }
-
测试分词器:
使用_analyze
API 可以实时测试自定义分词器的效果:POST my_index/_analyze { "analyzer": "my_custom_analyzer", "text": "Quick brown fox jumps over the lazy dog" }
-
实际应用:
定制的分词器可以在映射中指定给特定字段,使其在索引文档时和执行查询时使用此分词器。
请根据实际需求调整上述示例中的分词器类型、参数以及过滤器列表。例如,若需支持中文分词,则可能需要用到像ik_smart
或pinyin
这样的分词器插件,并相应地配置它们。
为了处理更复杂的场景,例如车牌号码提取、JSON键值对的分词等,可能需要组合使用多个过滤器并编写自定义逻辑。例如,使用pattern_capture
或者pattern_replace
过滤器来提取特定模式的内容。如果内置的分词器和过滤器不能满足需求,还可以开发自己的Java类并将其作为插件安装到Elasticsearch中。