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
    评论
es text 类型的数据如何精确查找取决于其配置和使用的分词器。在 Elasticsearch 中,text 类型的字段默认使用标准分词器进行分词,将文本分隔成单个词条。这种设置使得精确查找变得有些困难,因为它会将文本拆分成单个词条,并且进行了一些额外处理,如小写化和去除停用词等。 要实现在 text 类型的字段上进行精确查找,有以下几个方法: 1. 更改分词器:可以使用 keyword 分词器来将整个字段看作一个整体,而不是拆分成单个词条。这样可以实现精确匹配,但是会失去分词特性。 2. 使用 Term 查询:Term 查询可以用于精确匹配 text 类型的字段。它将查询关键词作为整体进行匹配。但需要注意,由于分词器对查询关键词也进行了相同的处理,所以需要确保查询关键词与文档中的文本一致。 3. 使用 Keyword 字段:可以为 text 类型的字段添加额外的 keyword 类型的子字段。这样,可以将文本以 text 类型进行全文搜索,同时以 keyword 类型进行精确匹配。 4. 禁用分析器:可以将 text 类型的字段设置为 "index": "not_analyzed",这样就可以禁用分析器,将文本视为一个整体进行精确匹配。但是这样做会失去分词特性。 总的来说,要在 text 类型的字段上实现精确查找,需要根据具体需求选择合适的方法,可能需要调整分词器、使用 Term 查询、添加 keyword 类型的子字段或禁用分析器,以满足实际需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值