ElasticSearch多索引搜索查询匹配结果所属索引及学校场景方案咨询
解决方案
现有多索引方案的问题修复
你无需调整已有的索引拆分逻辑,直接从ElasticSearch的原生返回结果中读取内置元字段即可解决归属识别问题:
- ES返回的每个命中结果(hit)默认携带
_index元字段,字段值即为该数据所属的索引名称 - 提前维护好「索引名-对应学校名」的映射关系,拿到结果后通过
_index字段匹配映射,即可快速得到该条结果归属的学校信息
以下为ES返回结果的典型结构片段参考:
{ "hits": { "total": { "value": 1, "relation": "eq" }, "hits": [ { "_index": "school_01_index", "_id": "123", "_source": { "name": "张三", "age": 16 } } ] } }
直接读取上述结构中的_index字段即可完成归属匹配。
更优实现方案推荐
如果你的业务后续存在学校数量新增、或者需要按学校做多维度过滤统计的需求,更推荐使用单索引方案:
- 在学生文档中新增
school_id、school_name两个字段作为基础属性存储 - 检索时直接对单索引用match查询匹配学生姓名,返回结果中直接就能取到
school_name字段,无需额外做索引到学校的映射转换 - 方案优势:后续新增学校无需单独创建索引,检索逻辑更简洁,也方便做跨学校的统计分析,适配业务规模增长的场景
如果三所学校的数据权限完全隔离、单校学生量级超过千万级,保留现有多索引方案也完全可行,按上述方法读取_index字段即可满足需求。
内容的提问来源于stack exchange,提问作者Jihad Arslan
相关产品推荐
相关产品推荐

