一、简介
随着云计算和大数据的普及,搜索引擎已经成为当今互联网技术的重要组成部分。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的开发工程师。
原创文章,作者:KDQKF,如若转载,请注明出处:https://www.506064.com/n/371741.html
微信扫一扫
支付宝扫一扫