elasticsearch查询中文时,返回结果为空

如下图所示,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"