2017/08/03

今天刷微博看到 @陈利人 在微博问一个搜索的问题:

最近在用 Elastic Search 做项目,遇到了这样一个需求,本以为 SpanNearQuery 能实现,发现不可以,因为 span_near 中定义的 slop 是两个邻近词之间的距离,而不是整个 query 所在的窗口的大小。

现在抛出这个这个问题求助,有解决方案的欢迎留言,一旦采用必有重谢。
给定 n 个词,要求搜索所有含有这 n 个词的文档,并且满足这 n 个词同时出现在长度为 m 的窗口中,还有就是这 n 个词在文档中出现的次序和搜索时的次序一致。
比如,搜索词是:“明天 北京 上海 火车”,要求文档中匹配的窗口的大小是12个词。
文档1: 大概 明天 有 一辆 从 北京 开往 上海 的 火车 将 提速 10%
1 2 3 4 5 6 7 8 9 10 11 12 13
这个文档满足条件,2 6 8 10 正好次序和 “明天 北京 上海 火车“一致,并且这几个词的跨度是8,小于要求的12窗口。
文档2: 大概 明天 有 一辆 从 上海 开往 北京 的 火车 将 提速 10%
1 2 3 4 5 6 7 8 9 10 11 12 13
这个不满足,因为“上海 北京”的次序不满足。
文档3: 大概 明天 上午 八点 左右 有 一辆 从 上海 开往 北京 的 混合 动力 的 火车 将 提速 10%
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18    19
这个不满足,2 9 11 16,这几个词的跨度是14,大于要求的12窗口。说明了吧,再次提前谢谢。

这个问题解决可以写个自定义query,根据term的position信息扩展,等业余时间多了写个玩玩。

你可能感兴趣的:(2017/08/03)