@
heihe 我的想法整体和你一致,就是分词放到 ES 上游,分好的 terms 用空格拼接,ES 内部再用空格分词;只不过我在分词之后额外做一个持久化存储( mongodb ),原因是我不清楚 es 保留全部_source 会不会对性能产生影响,如果只保留部分 field ,添加新 field 并要刷数据是就要用到(省去重新分词的步骤)
@
lix7 其实我主要的问题就是分词要不要从 es 拿出去,一是不清楚分词插件能否满足实际情况,以及维护自定义词典的成本;二是对 query 改写,如果要做实体识别提权等处理,是不是也要先分词才能处理?如果是的话不如就全放到 es 外面来做好了,灵活性还会更高一些,但一想到 es 已经集成了,就比较纠结。
排序这一块不太确定理解的对不对,我理解的是粗排已经由 es 做了,即 es 的主要作用时召回+粗排。精排则需要自己在外部服务去实现,我想法是每次查询请求召回的数量应该比前端请求的数量要多,比如前端传 20 条,我则是查询 es 返回 1000 条,然后再对这 1000 条数据进行精排并添加缓存。但是需求中往往有用户指定按照某个字段排序的情况,这时是不是和粗排精排就没关系了