当前位置: 首页 > 知识库问答 >
问题:

弹性搜索子集滤波器

伊飞光
2023-03-14

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

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

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

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

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

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

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

共有1个答案

沙富
2023-03-14

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

我不确定这样做的效率有多高,但理论上这可以在ElasticSearch上完成。理想情况下,应用一个优化的筛选器来缩小书籍集,然后在这些子集上运行它看看https://www.elastic.co/blog/all-about-elasticsearch-filter-bitsets和docs,在post_filters上,效率应该在一系列查询上进行理想的测试,因为一旦它的结果开始缓存,这个筛选器就会更好地预制出来。(请参阅https://www.elastic.co/blog/all-about-elasticsearch-filter-bitsets和docs)

 类似资料:
  • 我对Elasticsearch相当陌生,所以这是我的问题。我想用elasticsearch做一个搜索查询,想用多个术语过滤。 如果我想搜索用户'Tom',那么我希望获得用户'is active=1'、'is private=0'和'is owner=1'的所有匹配项。 这是我的搜索查询 谢谢你的帮助!!

  • 作为参考,我使用的是Elasticsearch 6.4.0 我有一个Elasticsearch查询,它返回一定的命中视频数,我正在尝试删除文本字段值过于相似的命中。我的查询是: 此查询使用自定义函数分数和筛选器来返回用户可能喜欢的书籍(他们尚未创作的书籍)。对于某些人来说,它返回的名字非常相似的书(即乔治·华盛顿的一生,乔治·华盛顿的美好时光,谁是乔治·华盛顿),我希望热门歌曲有一套更多样化的名字

  • 我有个问题。在常见的购物车网站有功能搜索产品与多个过滤器。例如,我正在搜索运动装备与一些过滤器,如: > 制造商 [x]耐克 阿迪达斯 茵宝 选项 尺寸 [x]s [x]M L [x]白色 黄色 红色 [x]蓝色 这是我的地图 部分测试数据 有了这个查询,一切都很好 但是,如果我在选项过滤器中添加更多的条件,我没有得到结果 我不知道我在映射或查询中是否错了,或者您能告诉我在这种情况下创建映射的最佳

  • 我试着遵循这里列出的Nutch+ES指南 https://gist.github.com/xrstf/b48a970098a8e76943b9 https://qbox.io/blog/scring-the-web-wit-nutch-for-elasticsearch 然而,我无法让他们的组合工作。基本上,我在Nutch上执行了以下命令: 现在,我想将获取的数据索引到ES中,我按照指南进行了操作

  • 我使用Elasticsearch允许用户输入要搜索的术语。例如,我要搜索以下属性'name': 如果使用以下代码搜索或,我希望返回此文档。 我尝试过做一个bool must和做多个术语,但它似乎只有在整个字符串都匹配的情况下才起作用。 所以我真正想做的是,这个词是否以任何顺序包含两个词。 有人能帮我走上正轨吗?我已经在这上面砸了一段时间了。

  • 当我执行ps-aef grep elasticsearch HeapDumpOnOutOfMemoryError时看到了这一点 501 373 47 1 0 2:29pm ttys004 0:04.14/usr/bin/Java-xms4g-xmx4g-xss256k-djava.awt.headless=true-xx:+useparnewgc-xx:+useparnewgc-xx:+usepa