如下图所示,elasticsearch配置的时IK中文分词,可以确定分词没问题。这是分词效果:
索引中也有相关的数据文档:
即使将"湖北"换成"湖",也是一样,返回结果始终为空,但是查询英文就是正常的。
这到底是什么原因呢?求解~
https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-term-query.html
设置字段为 "index": "not_analyzed"
可能是编码问题,中文需要进行 utf-8 处理再提交
elasticsearch 在查询中文时,已将每一个中文进行了分词的切割。所以,如果你要查询“湖北”时,就需要把query分成2部分,然后再组合在一起,
"query" : {
"bool" : {
"must" : {
"term" : {
"message" : "湖"
}
},
"must" : {
"term" : {
"message" : "北"
}
}
}
}
我要搜索计算机学院:
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.termQuery("college","计"));
boolQueryBuilder.must(QueryBuilders.termQuery("college","算"));
boolQueryBuilder.must(QueryBuilders.termQuery("college","机"));
boolQueryBuilder.must(QueryBuilders.termQuery("college","学"));
boolQueryBuilder.must(QueryBuilders.termQuery("college","院"));
这样感觉太麻烦了,不知道如何处理?
可以试试 QueryBuilders.matchPhraseQuery,并且字段索引要设置不分词成 "index": "not_analyzed"