elasticsearch中文汉字的精确查找

       最近做的项目有一个功能是要精确查找某个关键字,和另一个搜索功能公用一套ES搜索服务,但是遇到一个问题就是中文的精确查找,用es的termquery()去查只能查出英文和数字,查了很多资料终于搞定了。在这做一个记录和大牛们讨论:

    首先要装一下IK分词插件,这个对于中文搜索很重要,当然中文分词插件还有其他许多,es默认对中文是按字来分的。

    其次是建索引的时候指定每列的属性,如下:

client.admin().indices().prepareCreate(index).execute().actionGet();

XContentBuilder builder = null;
if(index.equals("finplanner")){
builder = XContentFactory
.jsonBuilder()
.startObject()
.startObject(type)
.startObject("properties")
.startObject("areaofexpertise")
.field("type", "string")
.field("store", "yes")
// .field("analyzer","ik")
.field("index","analyzed")
.endObject()
.startObject("company")
.field("type", "string")
.field("store", "yes")
.field("analyzer","ik")
.field("index","not_analyzed")
.endObject()
.startObject("province")
.field("type", "string")
.field("store", "yes")
.field("analyzer","ik")
.field("index","not_analyzed")
.endObject()
.endObject()
.endObject()
.endObject();
PutMappingRequest mapping = Requests.putMappingRequest(index).type(type).source(builder);
client.admin().indices().putMapping(mapping).actionGet();


最后插入数据的时候会按照每列的设置,是否分词,分词类型等进行搜索查询,如field("index","analyzed")表示该字段可以分词查询,等等。

最后注意的是建索引的时候,每个属性类型一定要定好,否则以后修改数据类型必须删除索引重建,数据要重导!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值