搜索分析器参数(Search Analyzer)

Search Analyzer 参数 #

search_analyzer 参数指定查询时使用的分析器,可以与索引时的 analyzer 不同。这允许在写入和查询时使用不同的文本分析策略。

相关指南(先读这些) #

分析器选择优先级 #

Easysearch 按以下优先级选择查询时分析器:

  1. 查询中指定的 analyzer 参数(如 match 查询的 analyzer 字段)
  2. 映射中字段的 search_analyzer
  3. 索引设置 analysis.analyzer.default_search
  4. 映射中字段的 analyzer
  5. standard 分析器

示例 #

写入时最大化召回,查询时精确匹配 #

PUT my-index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_smart_search": {
          "type": "custom",
          "tokenizer": "ik_smart"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
阶段分析器策略
索引时ik_max_word最细粒度分词,生成更多词项,最大化召回
查询时ik_smart智能分词,生成更少词项,提高精确度

同义词扩展只在查询时生效 #

"title": {
  "type": "text",
  "analyzer": "standard",
  "search_analyzer": "synonym_analyzer"
}

这样索引时不扩展同义词(节省空间),查询时通过同义词分析器扩展查询词。

常见用法 #

场景索引分析器查询分析器
中文搜索ik_max_word(最大召回)ik_smart(精确匹配)
同义词扩展standard带同义词过滤的自定义分析器
拼音搜索pinyinstandard(用户输入可能是拼音也可能是汉字)

注意事项 #

  • 如果不设置 search_analyzer,查询时默认使用字段的 analyzer
  • 索引时和查询时使用不同分析器时,需确保两者产生的词项能够正确匹配
  • 可以在具体查询中通过 analyzer 参数临时覆盖