Skip to content
📖0 阅读·🤍0 点赞

ES常用文本搜索类型故事版

  • text:文本类型(全文检索 ,会被分析,会被分词器进行分词: 这种text默认是不可精准检索)。这是Elasticsearch中用于全文搜索的字段类型。当你需要对字段内容进行全文搜索(例如,使用match、match_phrase等查询)时,应该使用 text类型。
  • annotated-text:包含特殊文本 标记。用于标识命名实体
  • completion ★:用于自动补全,即搜索推荐:字段的内容会被特殊地索引,以支持前缀搜索,这使得它可以快速地为输入提供补全建议。
  • search_as_you_type: 类似文本的字段,经过优化 为提供按类型完成的查询提供现成支持 用例
  • token_count:文本中的标记计数(这个并不会存初始文本) 好的,我们继续数字村的故事!这次村民们遇到了新的挑战:如何快速找到想要的信息?如何实现智能提示?如何统计文章长度?于是,村里成立了"文本搜索优化部",专门处理各种文本搜索的高级需求。

故事:数字村的文本搜索优化部

数字村的图书馆藏书越来越多,村民们查找信息变得困难。传统的搜索方式已经无法满足需求,于是村里成立了文本搜索优化部,由五位各具特色的专家组成:

  1. 全文检索大师 (text) - 文本类型(全文检索)

    • 专家: 全教授
    • 招牌: "深入理解,模糊匹配!"
    • 做什么:
      • 全教授是搜索部的元老,他采用"化整为零"的策略。拿到一篇文章后,他会用分词器把文章切分成一个个有意义的词语(分词)。
      • 比如"中华人民共和国万岁"会被分成:"中华", "人民", "共和国", "万岁"
    • 搜索特点:
      • 支持模糊匹配:搜索"华人"可能匹配到包含"中华"和"人民"的文章
      • 相关性排序:会根据关键词出现的频率、位置等因素计算相关性分数
      • 不支持精确匹配:由于文本被拆分了,无法精确匹配整个短语
    • 典型查询:
      json
      "match": {
        "content": "人工智能技术"
      }
    • 应用场景:
      • 新闻内容的全文搜索
      • 博客文章的内容检索
      • 文档库的模糊搜索
  2. 实体标记专家 (annotated-text) - 包含特殊标记的文本

    • 专家: 标记姐
    • 招牌: "标记重点,精准识别!"
    • 做什么:
      • 标记姐专门处理包含命名实体标记的文本。她能在文本中识别并标记出人名、地名、组织名等重要实体。
    • 文本示例:
      "篮球运动员在城市的比赛中表现出色。"
    • 搜索能力:
      • 可以专门搜索包含特定实体的文档
      • 支持按实体类型过滤(只找人名、地名等)
      • 高亮显示被标记的实体
    • 应用场景:
      • 新闻中的人物报道搜索
      • 学术文献中的术语检索
      • 法律文档中的条款标记
  3. 自动补全魔术师 (completion) - 自动补全类型

    • 专家: 补全君
    • 招牌: "输入即得,秒级响应!"
    • 做什么:
      • 补全君专门为搜索框的自动补全功能优化。他使用特殊的数据结构(FST)来存储建议词条,实现极快的前缀匹配。
    • 工作原理:
      • 用户输入"ali" → 立即提示:["阿里巴巴", "阿里云", "阿里山"]
      • 用户输入"微信" → 立即提示:["微信公众号", "微信支付", "微信小程序"]
    • 技术特点:
      • 前缀匹配:只匹配输入内容开头部分
      • 极快响应:通常在毫秒级别返回结果
      • 上下文感知:可以基于用户输入历史进行个性化提示
    • 应用场景:
      • 电商网站的商品搜索提示
      • 地图应用的地点自动补全
      • 代码编辑器的智能提示
  4. 实时搜索优化师 (search_as_you_type) - 实时搜索类型

    • 专家: 实时哥
    • 招牌: "边输边搜,越输越准!"
    • 做什么:
      • 实时哥专门优化"边输入边搜索"的体验。他会在索引时生成多个不同粒度的子字段,来支持各种匹配方式。
    • 匹配方式:
      • 输入"人工" → 匹配"人工智能"(前缀匹配)
      • 输入"能智" → 匹配"人工智能"(中缀匹配)
      • 输入"工智" → 可能匹配"人工智能"(模糊匹配)
    • 技术特点:
      • 生成2gram, 3gram等不同粒度的分词
      • 支持错别字容错
      • 响应速度极快,适合实时搜索
    • vs completion:
      • completion只做前缀匹配,但更快
      • search_as_you_type支持各种匹配,功能更全面
    • 应用场景:
      • 邮箱的收件人自动补全
      • 文档库的实时搜索
      • 用户名的模糊查找
  5. 词条计数统计员 (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:词条统计
  }
}

搜索流程:

  1. 用户输入"阿里" → completion 提示"阿里巴巴"、"阿里云"
  2. 用户选择"阿里巴巴"并继续输入"人工" → search_as_you_type 实时显示相关文档
  3. 用户搜索"阿里巴巴 人工智能" → text 进行全文相关性排序
  4. 同时使用annotated-text确保"阿里巴巴"作为公司实体被识别
  5. token_count过滤掉过短的低质量文档

对比总结

专家核心能力好比是...典型应用
全教授 (text)全文分词搜索图书馆的目录卡文档内容搜索
标记姐 (annotated-text)实体识别标记高亮笔标记重点人物、地点搜索
补全君 (completion)前缀自动补全输入法的联想词搜索框提示
实时哥 (search_as_you_type)实时多模式匹配智能搜索助手边输边搜
计数官 (token_count)词条数量统计文章字数统计长度过滤

实战建议

  1. 基础搜索:大多数场景用 text + keyword(精确匹配)组合
  2. 搜索提示:用 completion 做前缀提示,用 search_as_you_type 做实时搜索
  3. 内容质量:用 token_count 控制内容长度和质量
  4. 实体识别:需要专门处理人名、地名时用 annotated-text
  5. 性能权衡completion最快但功能有限,search_as_you_type功能全面但稍慢

数字村的文本搜索优化部让搜索体验变得智能而高效!现在村民们无论想找什么信息,都能快速精准地找到目标。🎯