ElasticSearch 查询text类型字段, 无法返回数据

博客讲述了在使用Elasticsearch时,尝试通过term查询进行完全匹配但失败的经历。问题在于字段映射使用了text类型,导致数据被分词。解决方法包括:1) 重新创建mapping使用不同数据类型;2) 改用match_phrase搜索,牺牲效率以适应标题等场景。由于数据样本特性,此方案适用于当前情况,但不一定适用于所有数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因:

  使用了一次term查询想进行完全匹配,失败了。

经过:

  经过多方调查(虽然也没有很多)发现原因如下:

    我想要进行查询的字段在创建mapping时使用的“text”数据类型进行创建。

    众所周知text类型的数据在elasticsearch中会进行分词并建立倒排索引,因此它会对每个词进行索引,而不会建立整个句子的索引。

    term搜索时会对整个句子作为关键词进行搜索,由于没有建立整个句子的关键词索引,因此无法查找到东西。

结果:

  解决方法:

    有人说没有方法,只能重新建mapping,建mapping的时候改成别的类型。

    我将term搜索改为match_phrase搜索,match_phrase搜索相当于sql语句里面的“like”。这种查询长文本的时候会很慢,不过可以用来搜索标题之类的查询

    由于我的数据样本每个标题和每个标题都不同,标题之间也没有明显的包含关系,因此之间拿来当term用了。

    不具有普遍性,换其它数据可能不适用,但是总之我可以先凑合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

过尽的风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值