ES常用文本搜索类型故事版
- text:文本类型(全文检索 ,会被分析,会被分词器进行分词: 这种text默认是不可精准检索)。这是Elasticsearch中用于全文搜索的字段类型。当你需要对字段内容进行全文搜索(例如,使用match、match_phrase等查询)时,应该使用
text
类型。
- annotated-text:包含特殊文本 标记。用于标识命名实体。
- completion ★:用于自动补全,即搜索推荐:字段的内容会被特殊地索引,以支持前缀搜索,这使得它可以快速地为输入提供补全建议。
- search_as_you_type: 类似文本的字段,经过优化 为提供按类型完成的查询提供现成支持 用例
- token_count:文本中的标记计数(这个并不会存初始文本) 好的,我们继续数字村的故事!这次村民们遇到了新的挑战:如何快速找到想要的信息?如何实现智能提示?如何统计文章长度?于是,村里成立了"文本搜索优化部",专门处理各种文本搜索的高级需求。
故事:数字村的文本搜索优化部
数字村的图书馆藏书越来越多,村民们查找信息变得困难。传统的搜索方式已经无法满足需求,于是村里成立了文本搜索优化部,由五位各具特色的专家组成:
全文检索大师 (
text
) - 文本类型(全文检索)- 专家: 全教授
- 招牌: "深入理解,模糊匹配!"
- 做什么:
- 全教授是搜索部的元老,他采用"化整为零"的策略。拿到一篇文章后,他会用分词器把文章切分成一个个有意义的词语(分词)。
- 比如"中华人民共和国万岁"会被分成:"中华", "人民", "共和国", "万岁"
- 搜索特点:
- 支持模糊匹配:搜索"华人"可能匹配到包含"中华"和"人民"的文章
- 相关性排序:会根据关键词出现的频率、位置等因素计算相关性分数
- 不支持精确匹配:由于文本被拆分了,无法精确匹配整个短语
- 典型查询:json
"match": { "content": "人工智能技术" }
- 应用场景:
- 新闻内容的全文搜索
- 博客文章的内容检索
- 文档库的模糊搜索
实体标记专家 (
annotated-text
) - 包含特殊标记的文本- 专家: 标记姐
- 招牌: "标记重点,精准识别!"
- 做什么:
- 标记姐专门处理包含命名实体标记的文本。她能在文本中识别并标记出人名、地名、组织名等重要实体。
- 文本示例:
"篮球运动员在城市的比赛中表现出色。"
- 搜索能力:
- 可以专门搜索包含特定实体的文档
- 支持按实体类型过滤(只找人名、地名等)
- 高亮显示被标记的实体
- 应用场景:
- 新闻中的人物报道搜索
- 学术文献中的术语检索
- 法律文档中的条款标记
自动补全魔术师 (
completion
) - 自动补全类型- 专家: 补全君
- 招牌: "输入即得,秒级响应!"
- 做什么:
- 补全君专门为搜索框的自动补全功能优化。他使用特殊的数据结构(FST)来存储建议词条,实现极快的前缀匹配。
- 工作原理:
- 用户输入"ali" → 立即提示:["阿里巴巴", "阿里云", "阿里山"]
- 用户输入"微信" → 立即提示:["微信公众号", "微信支付", "微信小程序"]
- 技术特点:
- 前缀匹配:只匹配输入内容开头部分
- 极快响应:通常在毫秒级别返回结果
- 上下文感知:可以基于用户输入历史进行个性化提示
- 应用场景:
- 电商网站的商品搜索提示
- 地图应用的地点自动补全
- 代码编辑器的智能提示
实时搜索优化师 (
search_as_you_type
) - 实时搜索类型- 专家: 实时哥
- 招牌: "边输边搜,越输越准!"
- 做什么:
- 实时哥专门优化"边输入边搜索"的体验。他会在索引时生成多个不同粒度的子字段,来支持各种匹配方式。
- 匹配方式:
- 输入"人工" → 匹配"人工智能"(前缀匹配)
- 输入"能智" → 匹配"人工智能"(中缀匹配)
- 输入"工智" → 可能匹配"人工智能"(模糊匹配)
- 技术特点:
- 生成2gram, 3gram等不同粒度的分词
- 支持错别字容错
- 响应速度极快,适合实时搜索
- vs completion:
completion
只做前缀匹配,但更快search_as_you_type
支持各种匹配,功能更全面
- 应用场景:
- 邮箱的收件人自动补全
- 文档库的实时搜索
- 用户名的模糊查找
词条计数统计员 (
token_count
) - 词条计数类型- 专家: 计数官
- 招牌: "不存原文,只数个数!"
- 做什么:
- 计数官有一个特殊的能力:他不存储文本内容本身,只统计文本被分词后的词条数量。
- 工作原理:
- 文章"人工智能改变世界"(分词后:["人工", "智能", "改变", "世界"])→ 计数:4
- 不存储原文"人工智能改变世界",只存储数字4
- 应用场景:
- 文章长度过滤:只显示500-1000词的文章
- 内容质量判断:过滤掉过短(可能不完整)的内容
- 阅读时间估算:根据词数估算阅读时间
- SEO优化:确保文章长度符合搜索引擎偏好
- 配置示例:json
"article_length": { "type": "token_count", "analyzer": "standard" }
- 查询示例:json
"range": { "article_length": { "gte": 500, "lte": 2000 } }
五位专家的协同作战
在实际的搜索系统中,这五位专家经常协同工作:
场景:智能文档搜索系统
json
{
"document": {
"title": "阿里巴巴人工智能技术发展报告",
"content": "文本内容...", // text类型:全文搜索
"content_annotated": "公司在城市发布了人工智能报告", // annotated-text:实体识别
"suggest": { // completion:自动补全
"input": ["阿里巴巴", "人工智能", "技术报告"]
},
"search_terms": "阿里巴巴 人工智能 技术 发展 报告", // search_as_you_type:实时搜索
"word_count": 2450 // token_count:词条统计
}
}
搜索流程:
- 用户输入"阿里" →
completion
提示"阿里巴巴"、"阿里云" - 用户选择"阿里巴巴"并继续输入"人工" →
search_as_you_type
实时显示相关文档 - 用户搜索"阿里巴巴 人工智能" →
text
进行全文相关性排序 - 同时使用
annotated-text
确保"阿里巴巴"作为公司实体被识别 - 用
token_count
过滤掉过短的低质量文档
对比总结
专家 | 核心能力 | 好比是... | 典型应用 |
---|---|---|---|
全教授 (text ) | 全文分词搜索 | 图书馆的目录卡 | 文档内容搜索 |
标记姐 (annotated-text ) | 实体识别标记 | 高亮笔标记重点 | 人物、地点搜索 |
补全君 (completion ) | 前缀自动补全 | 输入法的联想词 | 搜索框提示 |
实时哥 (search_as_you_type ) | 实时多模式匹配 | 智能搜索助手 | 边输边搜 |
计数官 (token_count ) | 词条数量统计 | 文章字数统计 | 长度过滤 |
实战建议
- 基础搜索:大多数场景用
text
+keyword
(精确匹配)组合 - 搜索提示:用
completion
做前缀提示,用search_as_you_type
做实时搜索 - 内容质量:用
token_count
控制内容长度和质量 - 实体识别:需要专门处理人名、地名时用
annotated-text
- 性能权衡:
completion
最快但功能有限,search_as_you_type
功能全面但稍慢
数字村的文本搜索优化部让搜索体验变得智能而高效!现在村民们无论想找什么信息,都能快速精准地找到目标。🎯