You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elasticsearch 5.2 剧集编号视频标题搜索技术咨询

针对带剧集编号的Elasticsearch搜索解决方案(ES 5.2版本)

嘿,这里完全是讨论这类Elasticsearch搜索问题的合适平台,不用找别的渠道啦!针对你提到的带剧集编号的视频搜索需求——比如用户搜“Four Beautyful Sun Flower 1”或者“Episode 15”时能精准定位对应剧集,结合ES 5.2的特性,我给你整理几个实用的解决方案:

1. 新增专属字段存储剧集编号

最直接有效的方式是给文档新增一个**episode_number整型字段**,专门提取并存储标题里的剧集数字(比如把“Episode 01”转换成1,“Episode 15”转换成15)。这样能实现精准的数值匹配,避免分词带来的干扰。

修改后的示例文档:

{"id": "1","title": "Four Beautyful Sun Flower - Episode 01", "episode_number": 1}
{"id": "2","title": "Four Beautyful Sun Flower - Episode 15", "episode_number": 15}

之后用户搜索时,你可以先从搜索词里提取数字(比如用正则匹配\d+),再直接针对episode_number做term查询,精准命中对应剧集。

2. 自定义分析器优化标题字段的分词

ES 5.2支持自定义字符过滤器和分析器,我们可以通过pattern_replace过滤器把剧集编号做特殊处理,让分词器更精准地识别剧集标识。

比如创建一个包含剧集处理逻辑的自定义索引:

{
  "settings": {
    "analysis": {
      "char_filter": {
        "episode_normalizer": {
          "type": "pattern_replace",
          "pattern": "Episode (\\d+)",
          "replacement": "Episode $1 EP$1"
        }
      },
      "analyzer": {
        "title_episode_analyzer": {
          "type": "custom",
          "char_filter": ["html_strip", "episode_normalizer"],
          "tokenizer": "standard",
          "filter": ["lowercase", "asciifolding"]
        }
      }
    }
  },
  "mappings": {
    "video": {
      "properties": {
        "title": {
          "type": "text",
          "analyzer": "title_episode_analyzer",
          "fields": {
            "keyword": {
              "type": "keyword"
            }
          }
        },
        "episode_number": {
          "type": "integer"
        }
      }
    }
  }
}

这个配置会把标题里的“Episode 01”转换成“Episode 01 EP01”,这样用户搜索“EP1”“01”这类变体时,也能匹配到对应的文档。

3. 多字段联合查询提升匹配精度

当用户输入搜索词时,我们可以同时查询title字段和episode_number字段,用bool查询组合两种匹配逻辑,既保证标题的相关性,又补充剧集编号的精准匹配:

{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "title": {
              "query": "Four Beautyful Sun Flower 1",
              "boost": 2
            }
          }
        },
        {
          "term": {
            "episode_number": 1
          }
        }
      ]
    }
  }
}

给title字段设置更高的boost值,确保标题匹配度高的结果排在前面,同时用episode_number的精准匹配兜底,避免漏判。

4. 同义词处理提升搜索容错性

如果用户习惯用“Ep”代替“Episode”这类缩写,你可以给自定义分析器加上同义词过滤器,统一处理这类变体:

在索引的analysis.filter里新增:

"synonym_episode": {
  "type": "synonym",
  "synonyms": ["ep, episode"]
}

然后把这个过滤器加到title_episode_analyzer的filter列表里,这样用户搜“Ep 1”也能匹配到“Episode 01”的视频。

另外提醒下:ES 5.2是比较早期的版本了,虽然以上方案都能正常运行,但如果后续有版本升级计划,新版本的ES(比如7.x及以上)有更灵活的文本处理能力(比如正则分词、动态模板等),可以进一步优化搜索体验。

内容的提问来源于stack exchange,提问作者Hoàng Phúc Lương

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 11:02:12