0、引言
Elasticsearch之分词器中文的我们一般使用IK,如果没有指定分词器。默认使用的是standard分词。
IK分词能将中文分成词组:
standard分词则会将每个中文分成一个单个的词:
其他分词器:ansj_index ......
优劣:IK 分词能够根据词库创建有效的分词索引,搜索的效率和准确率很高。劣势:有小部分词如果不存在词库,则不会被分词,因此在查询的时候,可能目标文本存在此词,但是分词分不出这词,则查询结果将为空。
优劣:standard分词是根据每个汉字进行的分词,因此 优势就是,IK存在的问题,将不会出现在standard分词上面,但是劣势更加明显,第一:搜索引擎的文本样例基本都是千万级,亿级数据,每字均创建索引,索引区会很大。第二:查询结果如果是match则会出现非常大的干扰型数据,且相关性的排序会不理想。特别是完全匹配跟部分匹配的排序非常糟糕(可能可以通过查询优化)。
其他:都存在某部分优劣,本文档就不全部讲述了
1、使用分词器 6.0.0以下
如果你使用的是其他分词器的话,你将ansj_index 换成你的standard 或者ik_max_word 等 即可。
GET请求即可
<code>http
: /<code>
结果如下:
<code>{"tokens"
: [ {"token"
:"测试用例"
,"start_offset"
:0
,"end_offset"
:4
,"type"
:"word"
,"position"
:1
}, {"token"
:"测试"
,"start_offset"
:0
,"end_offset"
:2
,"type"
:"word"
,"position"
:2
}, {"token"
:"试用"
,"start_offset"
:1
,"end_offset"
:3
,"type"
:"word"
,"position"
:3
} ] } /<code>
2、查询分词器6.0.0及上
POST请求:下面是JSON数据
<code>http
: /<code>
<code>{"analyzer"
:"ik_max_word"
,"text"
:"测试用例"
} /<code>
<code>{"tokens"
: [ {"token"
:"测试"
,"start_offset"
:0
,"end_offset"
:2
,"type"
:"CN_WORD"
,"position"
:0
}, {"token"
:"试用"
,"start_offset"
:1
,"end_offset"
:3
,"type"
:"CN_WORD"
,"position"
:1
}, {"token"
:"例"
,"start_offset"
:3
,"end_offset"
:4
,"type"
:"CN_CHAR"
,"position"
:2
} ] } /<code>
上面是正常情况下面的使用方式。
3、6.0.0以上使用老的查询方式
<code>http
: /<code>
<code>报错: {"error"
: {"root_cause"
: [{"type"
:"parse_exception"
,"reason"
:"request body or source parameter is required"
}],"type"
:"parse_exception"
,"reason"
:"request body or source parameter is required"
},"status"
: 400 } /<code>
处理方式是你用6.0.0的方式即可。
elasticsearch6查看分词器效果
Elasticsearch 默认分词器和中分分词器
ElasticSearch6 安装中文分词器
原来来自:https://ithut.top/detail?id=79