Elasticsearch模糊匹配新姿势:ngram分词器详解
创作时间:
作者:
@小白创作中心
Elasticsearch模糊匹配新姿势:ngram分词器详解
引用
11
来源
1.
https://www.elastic.co/guide/en/elasticsearch/reference/current/api-conventions.html
2.
https://opster.com/guides/elasticsearch/best-practices/elasticsearch-misuse-of-wildcards/
3.
https://discuss.elastic.co/t/want-to-do-partial-match-without-using-wildcards/362928
4.
https://www.cnblogs.com/MrHSR/p/18121718
5.
https://elastic.ac.cn/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html
6.
https://www.elastic.co/guide/en/elasticsearch/reference/current/_retrievers_examples.html
7.
https://www.elastic.co/guide/en/elasticsearch/reference/current/full-text-search.html
8.
https://opster.com/guides/elasticsearch/data-architecture/elasticsearch-index-pattern/
9.
https://developer.aliyun.com/article/1502311
10.
https://developer.aliyun.com/article/632232
11.
https://www.explinks.com/blog/deep-dive-into-elasticsearch-query-optimization-using-profile-tool-api-for-performance-enhancement/
在Elasticsearch中,模糊匹配是一个常见的需求,尤其是在处理用户输入的搜索查询时。传统的wildcard查询虽然灵活,但性能较差,特别是在大数据量下。而ngram分词器提供了一种更高效、更精确的模糊匹配解决方案。
ngram分词器的工作原理
ngram分词器的核心思想是将文本按照固定长度的滑动窗口进行切分,形成一系列的gram序列。每个gram都是一个连续的字符片段,通过对这些gram的出现频度进行统计,可以构建出文本的特征向量空间。
例如,对于文本"Quick Fox",使用默认配置(min_gram=1, max_gram=2)进行分词的结果为:
[Q, Qu, u, ui, i, ic, c, ck, k, "k ", " F", F, Fo, o, ox, x]
通过调整min_gram和max_gram参数,可以控制分词的粒度。通常建议从3开始作为min_gram的起点,因为更小的值可能会导致过多的无关匹配。
ngram vs wildcard:性能对比
wildcard查询在处理以*开头的模式时,需要扫描大量词条,性能随数据量增加而显著下降。而ngram分词器通过预先构建gram索引,可以快速定位匹配项,大大提高了查询效率。
实际应用场景
ngram分词器特别适合以下场景:
- 无分隔符文本的搜索:如手机号码、型号编号等
- 高亮显示需求:结合match或match_phrase查询实现关键词高亮
- 大数据量下的模糊搜索:通过空间换时间的方式提升检索效率
配置示例
下面是一个具体的配置示例,展示了如何在Elasticsearch中设置ngram分词器:
PUT my-index-000001
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 3,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
}
使用这个配置对"2 Quick Foxes."进行分词的结果为:
[Qui, uic, ick, Fox, oxe, xes]
使用建议
- 合理设置min_gram和max_gram:较小的min_gram会增加匹配结果数量,降低相关性;较大的max_gram则会减少匹配结果,提高相关性。
- 注意存储空间:ngram分词会增加索引大小,需要在存储空间和查询性能之间做出权衡。
- 结合其他查询类型:在实际应用中,可以将ngram分词器与term查询、match查询等结合使用,以达到最佳效果。
通过以上介绍可以看出,ngram分词器是Elasticsearch中实现高效模糊匹配的重要工具。它不仅能够提供比wildcard查询更好的性能,还能在多种场景下实现更精确的匹配效果。
热门推荐
国外热门卡牌游戏排行:像素风游戏的魅力与策略竞技
文字狱的阴影——探索苏轼乌台诗案的真相与影响
如何寻找太极团队
男性多少岁可以领社保退休金?一文详解退休金领取政策
U20国足惜败,差距在哪?致命软肋曝光,成制约突破的关键因素
亲子共读指南:助力一年级孩子快乐识字与阅读
饥荒联机版一角鲸有哪些特性
中国的夏朝:神话与历史的交锋
9个助眠瑜伽姿势,睡覺前15分钟,初学者马上学会
一文读懂食品添加剂的种类及功能
员工集资持股合法吗
桂鱼的做法
乌克兰的特产有哪些?从套娃到萨洛,这些特产展现东欧文化魅力
马币和人民币的汇率?如何实现实时汇率转换?
煮牛肉放什么调料好吃又烂?揭秘让肉质鲜嫩多汁的秘密武器!
赛季亮点回顾斯蒂芬库里的绝妙时刻与精彩表现
车险忘了续保会有什么风险?如何避免车险过期带来的法律和经济问题?
长期饮酒的人,鼻滴干细胞外泌体或许有帮助!新文献揭示可减轻酒精带来的损伤
前央视名嘴赵普:从"铁饭碗"到传统文化守护者
有内容才显示示例
文化力量 向新提质|中山:文化兴城打造“人文湾区”新地标
万亿住宅维修基金:存在哪、谁在管、怎么用?
一员工为证明加班每天拍照打卡30次?法院:恶意收集证据!
股票回踩的原因是什么?这种现象对投资者有什么启示?
筋膜枪用力按还是轻轻按?筋膜枪使用全攻略
工业工程方法优化生产线平衡【企业数据+代码】
30首大雪诗词,惊艳了整个冬天
农技尖兵朱丽芬:三十余载书写农业华章
企业降本增效四大供应链策略:采购、生产、计划、物流全方位优化
揭秘生肖合婚:传统迷信还是科学依据?