es查询使用ik_smart分词器和ik_max_word分词器查询长的字符串都可以查到数据,当使用”饭局“关键字查询不到任何数据。
es版本7.1.0
前提:在创建索引的时候没有直接指定content的分词器, 而是在查询的时候指定的分词器。
下面对两种模式做测试:
1、使用ik_smart分词:{
"analyzer":"ik_smart",
"text":"饭局"
}
使用ik_smart分词结果:
{"tokens": [
{
"token": "饭局",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
}
]}
2、使用ik_max_word分词:
{
"analyzer":"ik_max_word",
"text":"饭局"
}
使用ik_max_word分词结果:
{"tokens": [
{
"token": "饭局",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
}
]}
doc内容包含"饭局"如下:
查询java代码如下:
es版本7.1.0
前提:在创建索引的时候没有直接指定content的分词器, 而是在查询的时候指定的分词器。
下面对两种模式做测试:
1、使用ik_smart分词:{
"analyzer":"ik_smart",
"text":"饭局"
}
使用ik_smart分词结果:
{"tokens": [
{
"token": "饭局",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
}
]}
2、使用ik_max_word分词:
{
"analyzer":"ik_max_word",
"text":"饭局"
}
使用ik_max_word分词结果:
{"tokens": [
{
"token": "饭局",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 0
}
]}
doc内容包含"饭局"如下:
查询java代码如下:
3 个回复
Sune - 90后IT
赞同来自:
IK分词器主要有两种:ik_smart、ik_max_word,根据需求在创建索引的时候指定全局默认索引,或者在设置doc的单个属性的分词器。
问题:第二张图上指定的分词器不好使,还会导致其它的词条查不到数据的情况 ,具体原因需要再查。
解决办法:因属性比较简单,数据量小,所以重建索引,重新同步数据,设置索引的默认分词器,设置一切正常了。
http://191.168.2.55:9200/order_index/{
"settings" : {
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}
alvin - 90后IT男
赞同来自:
最好在创建索引时指定analyzer,查询时很少指定用什么分词器的
WangChuanfu - 深入学习es
赞同来自: