Elasticsearch实现内容精确匹配查询

news/2025/1/31 10:59:04/

一、 问题描述

  1. 需要搜索的内容为:【飞科剃须刀】
  2. 实际搜索,需要满足的条件:
    a.检索关键词“飞科”,“剃须”、“刀”,都能搜出这篇文档。
    b.干扰搜索“水果刀”,文档不要被检索出来。
    c.单个字拆分“剃”、“须”太多干扰文档不要被检索出来。
    d.待检索的词“科剃”、“科剃须”不在词典中,但只要在原文中出现,都要检索到。
    e.检索关键词“飞科剃须”,能搜出这篇文档
    f.检索速度要快,不影响性能。
  3. 分词测试:
  • Standard分词器
GET /my_index/_analyze
{"text":"飞科剃须刀","analyzer":"standard"
}
分词结果:飞、科、剃、须、刀
  • ik_max_word分词器
GET /my_index/_analyze
{"text":"飞科剃须刀","analyzer":"ik_max_word"
}
分词结果:飞、科、剃须刀、剃须、刀
  • ik_smart分词器
GET /my_index/_analyze
{"text":"飞科剃须刀","analyzer":"ik_smart"
}
分词结果:飞、科、剃须刀

二、问题分析

  1. 针对要求a,可以采用全文检索(match、match_phrase)。
  • match查询实现精确匹配
GET /my_index/_search
{"query":{"match":{"qss":{"query":"飞科"  //分别尝试“剃须”、“刀”,都能检索到包含“飞科剃须刀”的文档}}}
}
  • match_phrase查询实现完全匹配
    文档同时满足下面两个条件才会被搜索到:
    (1)分词后所有词项都要出现在该字段中
    (2)字段中的词项顺序要一致
GET my_index/_search
{"query": {"match_phrase": {"qss": "飞科" //分别尝试“剃须”、“刀”,都能检索到包含“飞科剃须刀”的文档}}
}
  1. 针对要求b,match查询检索范围太大、干扰太多,排除;ik_smart分词器没有“剃须”词项,排除match查询后,与 match_phrase 结合使用,依然检索不到,故排除。
  2. 针对要求c,standard 分词器会出现非常多冗余数据,排除。
  3. 针对要求d,ik_max_word 有些词项不包含,排除。
  4. 针对要求e,match_phrase 查询不到,排除。
  5. 针对要求f,wildcard 模糊查询影响性能,排除。

三、为什么会检索不到?

  1. 分词原因/词典未收录原因。
    在上文问题d中,由于分词器中不包含“科剃”等词项,所以检索不到。
  2. postition位置不一致。
    在上文问题e中,由于分词器分词器对“飞科剃须”和“飞科剃须刀”分词的postition位置不一致,所以检索不到。
飞科剃须飞科剃须刀
tokenpositiontokenposition
00
11
剃须2剃须刀2
剃须3
4

四、解决方案

1. match_phrase_prefix结合slop的方案
GET my_index/_search
{"query": {"match_phrase_prefix": {"qss": {“query”:"飞科剃须",“slop”:1      //指定相邻词之间允许相隔多远。设置为0,则为完全匹配。}}}
}

能应对一部分业务。但是分析发现:slop设置不论多大、多小,都可能会引入噪音数据,导致结果不准确。

2. match_phrase结合match should关联匹配。

依然会引入噪音数据。

3. 终极方案:逐个字分词和ik分词结合的方式。
  • mapping设置:
PUT mx_index{"mappings": {"_doc": {"properties": {"qss": {"type": "text","analyzer": "ik_max_word","fields": {"standard": {"type": "text","analyzer": "standard"},"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}
  • 搜索:
GET mx_index/_search
{"query": {"bool": {"should": [{"match_phrase": {"qss": "科剃"}},{"match_phrase": {"qss.standard": "科剃"}}]}}
}

http://www.ppmy.cn/news/140136.html

相关文章

惠普打印机怎么使用

惠普打印机我们都比较熟悉了,很多家庭使用的都是这个牌子,在家里备上一台打印机,无论是对自己的工作,还是孩子的学习都是非常有益的。对于打印机的使用方式很多人一直都不解。下面小编就来为大家介绍下 惠普打印机使用方法&#x…

小红书七夕营销攻略,玩出新花样(内附小红书推广方案干货)

导语:作为中国传统情人节——七夕(8月4日)即将到来,品牌把握好节日机会,不仅可以刷一波存在感,提升品牌小红书指数,还能达成各种营销目的。那么,小红书七夕营销有哪些走心切入点&…

2022年情人节送男朋友什么礼物好?情人节礼物推荐

情人节起源于公元三世纪的古罗马,为了纪念Valentine的勇敢精神,人们将每年的2月14日定为Valentine的纪念日。从而演变成了如今的情人节。每年的2月14号正值隆冬季节,但冬季的寒冷丝毫掩饰不了彼此之间的浓浓深情,飘雪的日子&#…

七夕给男朋友送什么礼物好、七夕男朋友礼物清单

七夕节对于情侣们来说是一个节日,对于单身的人来说是一个机会,不管你是单身还是正跟男生拍拖,都可以在这一天的时候送你喜欢的男生一个礼物。礼物传情,在传统情人节七夕这天送心仪的男生一份礼物能增进你们之间的感情。但是现在网…

大数据告诉你中国人喜欢用什么来刮胡子

对某方面有统计需求的同学可以留言哟~O(∩_∩)O~!!! 好久没更新了,发这篇统计文章还是想了好一会儿的,毕竟感觉题材有点奇葩。 不过本来就是只想做些日常生活的统计而已,就硬着头皮发出来了,哈哈…

520送男朋友什么礼物最好、送男友礼物清单

时间过得真快啊,520又开始逼近了,大家都准备好礼物了?虽然520只是一个网络节日,但咱们年轻人对它特别上心,其重要性几乎不亚于2.14情人节!如果不好好表现,给TA送一份合乎心意的礼物,…

七夕送什么礼物给男朋友合适,五款七夕送礼推荐

七夕即将到来,很多的女生都在纠结,该送什么给自己的男朋友。今天就分享几款七夕适合送给男生的礼物吧。七夕礼物还是要用心去挑选的,要想两人感情升温,在礼物的选择上要认真考虑,切不可等时间快到了,匆忙准…

主业失利,跨界捞金,飞科的算盘能如意吗?

(图片来源于网络) 文 | 易不二 来源 | 螳螂财经(ID:TanglangFin) 一场疫情,有一些人宅成了“厨神”,而也有另一些人,走在了成为“Tony老师”的路上。 只是,在疫情得到稳定控制后…