分词器的使用
类型为keyword表示不分词,要想分词,字段类型必须为text
一、指定分词器
- 设置mapping,新建一个索引article并且指定字段使用的分词器
<!--设置指定分词器的索引,字段的类型必须为text-->
PUT article
{
"mappings":{
"properties":{
"content":{
"type":"text",
<!--hanlp_index是安装了hanlp分词器插件后自带的分词器-->
"analyzer":"hanlp_index"
}
}
}
}
查询
- 查询
GET article/_search
{
"query":{
"match":{
"content":"查询内容"
}
}
}
查看分词效果
- 查看索引使用的分词器分词效果(第一种)
GET article/_analyze
{
"field":"content",
"text":["将这一句话进行分词","看看效果如何"]
}
- 直接使用分词器查看分词效果(第二种)
GET _analyze
{
"analyzer":"分词器",
"text":["将这一句话进行分词"]
}
二、自定义拼音分词器
1.新建索引,设置settings
新建一个索引stars,并且设置settings。
anaylzer是由三部分组成:
- Character Filter:将文本的html标签剔除
- Tokenizer:按照规则进行分词,在英文中按照空格分词
- Token Filter:去掉stop word(停顿词,a,the,is),然后转小写
PUT stars
{
"settings":{
"analysis":{
"analyzer":{
<!--自定义的分词器名称-->
"my_analyzer":{
<!--定义分词器的tokenizer部分-->
"tokenizer":"my_token_filter"
}
},
"tokenizer":{
"my_token_filter":{
"type":"pinyin",
<!--可选参数-->
"keep_original":true,
"keep_joined_full_pinyin":true,
"keep_full_pinyin":"false"
}
}
}
}
}
此时定义好了一个my_analyzer的分词器,是基于pinyin分词器,其中的可选参数的作用参考github文档
1.1 查看自定义的分词器效果
第三种
GET stars/_analyze
{
"analyzer":"my_analyzer",
"text":["测试分词的效果"]
}
2.设置mapping
PUT stars/_mapping
{
"properties":{
"name":{
"type":"text",
<!--指定分词器-->
"analyzer":"my_analyzer"
}
}
}
此时设置mapping的方式不能使用一中的方式,因为在设置完settings以后,索引的结构已经存在maping(使用GET stars/_mapping
查看如下)
如果依然采用一中的方式会显示错误