es自定义了一些没有的词汇,搜索在使用这些词的时候能搜索到吗?

1 个回答

  • 孙悟空
    活在别人的言论下,是对自己的不尊重。
    结论先说:**能不能搜到,取决于“索引阶段有没有产出这个新词的倒排项”。** * 你把“米笋”加进 IK 扩展词典并热更新后: 1. **新写入/被更新的文档**:会按新词库分词,产生 `米笋` 这个 term;**用“米笋”搜索能命中**。 2. **历史未更新的文档**:倒排里**没有** `米笋` 这个 term;即使搜索时分词器已认识“米笋”,**也命不中**(查询侧有词,索引侧没词)。 要让历史数据也能用新词命中,二选一: * 原地重建倒排(不停机): ```http POST order_es/_update_by_query?conflicts=proceed&slices=auto&wait_for_completion=false { "script": { "source": "ctx._source._ik_rebuild = true" }, // 任意“真更新” "query": { "match_all": {} } } ``` 跑完可再把 `_ik_rebuild` 清掉。 * 重建索引: `_reindex` 到新索引 → 切别名。 补充要点: * 搜索分词器(`search_analyzer`)要用 IK(会自动用新词库),但**只有索引里也有同名 term 才能匹配**。 * 用 `*.keyword` 做 `wildcard "*米笋*"` 可以匹配整串包含,但前提是你有 `.keyword` 字段;普通 `text` 字段在没产生“糯米笋/米笋”词项时,`*米笋*`通常也匹配不到。 * 可用 `_analyze` 验证词库是否生效: ```http POST order_es/_analyze { "analyzer": "ik_max_word", "text": "糯米笋" } ```
    发布于 2025-08-18 08:13 •IP属地 山东
    举报
    评论
    收藏