中文分词器
- 前言
- 一、使用中文分词器建立索引
- 二、使用步骤
-
- 1.新建中文查询
- 2.问题原因
-
- 2.1中文分词器
- 3. 解决方案
-
- 3.1
- 总结
前言
提示:es查询中中文分词器的使用是比较多的,
但是这个中文分词器也有一些问题。
一、使用中文分词器建立索引
PUT /test
{
"settings" : {
"analysis" : {
"analyzer" : {
"ik" : {
"tokenizer" : "ik_max_word"
}
}
}
},
"mappings": {
"properties": {
"name": { "type": "text",
"analyzer": "ik_max_word"
},
"nameType": { "type": "text",
"analyzer": "ik_max_word"},
"time": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || yyyy/MM/dd HH:mm:ss|| yyyy/MM/dd ||epoch_millis"
},
"tags": {
"properties": {
"id": {"type":"keyword"},
"tagName": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
}
}
插入记录

二、使用步骤
1.新建中文查询
//2、创建条件构造
SearchSourceBuilder builder = new SearchSourceBuilder();
//3、构造条件
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.matchQuery("nameType","男"));
BoolQueryBuilder condition = new BoolQueryBuilder();
condition.should(QueryBuilders.matchQuery("name","明"));
condition.should(QueryBuilders.matchQuery("tags.tagName","小"));
boolQueryBuilder.must(condition);
builder.query(boolQueryBuilder);
这里查询名字含有明字的查询,
但是结果却查不出来
2.问题原因
2.1中文分词器
分词器也不是所有的词语都会分词,可以用kibana对这个词语进行分词分析
这里的王小明,只会分词成王小明,小明,所以查询"明"字是查询不出来的。
3. 解决方案
3.1
1.如果要求匹配结果可以不是很准确,可以使用ik分词器进行分词。
2.如果要求,包含有的字一定要匹配出来,使用text的类型即可,不使用ik分词器,继续使用matchquery,这样查"明"是可以查出来的,缺点是每个字都会进行建立索引。
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,如果同学们有更好的处理办法,请留言,大家共同学习。