Elasticsearch 子集过滤器

标签 elasticsearch elasticsearch-plugin

我有一个关于书籍的数据集,每本书都可以使用一种或多种语言。每个用户都注册为拥有一种或多种语言。

当用户搜索书籍时,我只想返回那些他们理解所有语言的书籍。

例如系统中有以下两本书:

Book A: English, French, German
Book B: English, Greek

如果 John 注册为懂英语、德语、法语和意大利语,那么他的查询结果不应该包含 Book B。

我的系统目前使用 Apache Solr 编写,我最终编写了一个插件来执行子集操作(如果记录的语言是用户语言的子集,则记录匹配,其中用户的语言在查询中声明)。

但是,我想转换到 Elasticsearch后端。然而,这种特殊的子集行为似乎并不是核心过滤器包的一部分。我是否遗漏了什么,或者我应该考虑编写一个类似的插件/自定义过滤器?

最佳答案

这可以使用脚本过滤器来完成,您可以将逗号分隔的字符串列表作为参数传递给它,并使用 for 循环来确保每个组件都包含在内,即使没有组件也可以使用 break 并返回 false。如果所有当前循环退出并返回 true。

我不确定这有多高效,但理论上这可以在 elasticsearch 上完成。理想情况下应用优化的过滤器来缩小书籍集的范围,然后在这些子集上运行它看看 https://www.elastic.co/blog/all-about-elasticsearch-filter-bitsets和 post_filters 上的文档,理想情况下应该通过一堆查询来测试效率,因为一旦开始缓存其结果,此过滤器将执行得更好

关于Elasticsearch 子集过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24234599/

相关文章:

elasticsearch - 如何使用 Elasticsearch 对文本字段进行排序

elasticsearch - elasticsearch通配符索引类型

sql - 使用Grails插件将SQL查询转换为Java Elasticsearch查询

node.js - Elasticsearch 分页来源 - 大小结果窗口太大

elasticsearch - 如何仅使用Shield访问仪表板选项卡以监控kibana中的图形?

elasticsearch - 带有过滤器的ElasticSearch query_string无法获取结果

elasticsearch - 嵌套字段中的嵌套聚合?

elasticsearch - Elasticsearch 性能相关的海量数据查询

java - 如何在 Elasticsearch 中索引 pdf 文档内容?

elasticsearch - Nest ElasticSearch:使用嵌套查询和嵌套对象的 bool 搜索