一、简介
随着云计算和大数据的普及,搜索引擎已经成为当今互联网技术的重要组成部分。elasticsearch作为开源全文搜索引擎,其分词器作为搜索引擎的核心组件,具有重要的作用。elasticsearch的分词器主要有以下三个部分:
- 字符过滤器:对原始输入和标记化的术语进行字符级处理,比如删除HTML标签、转换字符编码
- 分词器:将输入的文本拆分成单个单词(词项)的过程
- 标记过滤器:修改、删除或添加特定标记,比如stemming、lowercasing、stopwords
二、分词器的分类
elasticsearch分词器按照不同的算法可分为五种:
- Standard Analyzer(标准分词器):按照非字母符号或空格分词
- Simple Analyzer(简单分词器):按照非字母符号或空格分词,并忽略大小写
- Whitespace Analyzer(空格分词器):按照空格分词
- Keyword Analyzer(关键字分词器):将输入视作一个单一术语,常用于过滤或精确匹配查询
- Language-specific Analyzers(特定语言分词器):基于不同语言的特点进行分词,如中文分词、德语分词、法语分词等
三、中文分词器的使用
中文分词是一项复杂的任务,elasticsearch提供了多种中文分词器,比如IK分词器和smartcn分词器。下面是使用IK分词器进行中文分词的代码示例:
$ curl -X PUT "localhost:9200/test" -H 'Content-Type: application/json' -d' { "settings": { "analysis": { "analyzer": { "ik_max_word": { "type": "custom", "tokenizer": "ik_max_word" }, "ik_smart": { "type": "custom", "tokenizer": "ik_smart" } } } } } ' $ curl -X GET "localhost:9200/test/_analyze?pretty=true" -H 'Content-Type: application/json' -d' { "analyzer": "ik_max_word", "text": "我是一名全能编程开发工程师" } ' // 返回结果: { "tokens" : [ { "token" : "我", "start_offset" : 0, "end_offset" : 1, "type" : "CN_WORD", "position" : 0 }, { "token" : "是", "start_offset" : 1, "end_offset" : 2, "type" : "CN_WORD", "position" : 1 }, { "token" : "一名", "start_offset" : 2, "end_offset" : 4, "type" : "CN_WORD", "position" : 2 }, { "token" : "全能", "start_offset" : 4, "end_offset" : 6, "type" : "CN_WORD", "position" : 3 }, { "token" : "编程", "start_offset" : 6, "end_offset" : 8, "type" : "CN_WORD", "position" : 4 }, { "token" : "开发", "start_offset" : 8, "end_offset" : 10, "type" : "CN_WORD", "position" : 5 }, { "token" : "工程师", "start_offset" : 10, "end_offset" : 13, "type" : "CN_WORD", "position" : 6 } ] }
四、标记过滤器的使用
标记过滤器用于修改、删除或添加特定标记,比如stemming、lowercasing、stopwords。下面是使用stopwords标记过滤器过滤“我是一个全能编程开发工程师”中停用词的代码示例:
PUT /stopwords_test { "settings": { "analysis": { "filter": { "my_stopwords": { "type": "stop", "stopwords": ["我", "是", "一个"] } }, "analyzer": { "my_analyzer": { "tokenizer": "standard", "filter": ["lowercase", "my_stopwords"] } } } } } GET /stopwords_test/_analyze { "analyzer": "my_analyzer", "text": "我是一个全能编程开发工程师" } // 返回结果: { "tokens": [ { "token": "全能", "start_offset": 5, "end_offset": 7, "type": "", "position": 3 }, { "token": "编程", "start_offset": 7, "end_offset": 9, "type": " ", "position": 4 }, { "token": "开发", "start_offset": 9, "end_offset": 11, "type": " ", "position": 5 }, { "token": "工程师", "start_offset": 11, "end_offset": 14, "type": " ", "position": 6 } ] }
五、结尾
以上是elasticsearch分词器的基本介绍和使用方法。不同的分词器和标记过滤器的使用场景不同,可以根据不同情况进行选择使用。希望这篇文章能够帮助到使用elasticsearch的开发工程师。