«

ElasticSearch核心技术解析:倒排索引与IK分词器如何解决中文搜索痛点

俞事 发布于 阅读:470


倒排索引

  1. 核心结构

    • 词项字典(Term Dictionary):存储所有文档中出现的唯一词项,按字典序排序,便于快速定位。
    • 倒排列表(Posting List):记录每个词项对应的文档ID(DocID)、词频(TF)、位置(Position)及偏移量(Offset),支持布尔检索、短语查询等场景。
    • 压缩算法:通过FOR(Frame Of Reference)、Roaring Bitmap等技术压缩倒排列表,降低存储与内存占用。
  2. 解决搜索痛点的机制

    • 快速定位文档:通过词项字典直接跳转到目标词项的倒排列表,避免全表扫描。
    • 相关性评分:结合词频、逆文档频率(IDF)等计算文档相关性(如TF-IDF、BM25算法)。
    • 近实时搜索:通过内存缓冲区(Indexing Buffer)和段(Segment)合并机制,实现数据写入后秒级可查。

IK分词器

  1. 中文分词挑战

    • 歧义切分:如“结婚的和尚未结婚的”存在多种切分可能。
    • 未登录词识别:新词、专业术语(如“区块链”“奥密克戎”)无法被传统词典覆盖。
    • 长词组合:需平衡细粒度切分与语义完整性(如“中华人民共和国”应整体切分)。
  2. IK核心功能

    • 细粒度切分(ik_smart):保证语义连贯性,适合精准搜索场景。
      示例:“苹果手机”切分为[苹果, 手机]
    • 最大词长切分(ik_max_word):穷举所有可能组合,适合召回率优先场景。
      示例:“中国共产党”切分为[中国, 共产党, 中共, 国共, 产党]
    • 自定义词典扩展:支持用户添加行业术语、热词,解决未登录词问题。
    • 歧义消除算法:基于隐马尔可夫模型(HMM)与正向/逆向最大匹配策略,优化切分准确性。

倒排索引与IK协同优化中文搜索

  1. 精准词项匹配
    • IK分词器将中文文本切分为独立词项,倒排索引建立词项与文档的映射关系。
      示例:搜索“机器学习”时,IK切分为[机器, 学习, 机器学习],倒排索引同时命中短词与长词组合。
  2. 解决歧义与长词问题
    • 通过ik_max_word生成多粒度词项,结合倒排索引的TF-IDF权重,优先返回高相关性结果。
  3. 动态更新支持
    • IK支持热更新自定义词典,倒排索引通过段合并机制实时生效新词,无需重建全量索引。

配置示例(Elasticsearch)

PUT /my_index  
{  
  "settings": {  
    "analysis": {  
      "analyzer": {  
        "ik_custom": {  
          "type": "custom",  
          "tokenizer": "ik_max_word",  
          "filter": ["lowercase"]  
        }  
      }  
    }  
  },  
  "mappings": {  
    "properties": {  
      "content": {  
        "type": "text",  
        "analyzer": "ik_custom",  
        "search_analyzer": "ik_smart"  
      }  
    }  
  }  
}  

取消
微信二维码
微信二维码
支付宝二维码