中文分詞器
- 前言
- 一、使用中文分詞器建立索引
- 二、使用步驟
-
- 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,這樣查"明"是可以查出來的,缺點是每個字都會進行建立索引。
總結
提示:這裡對文章進行總結:
例如:以上就是今天要講的内容,如果同學們有更好的處理辦法,請留言,大家共同學習。