首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有办法在solr中合并两个查询吗?

有办法在solr中合并两个查询吗?
EN

Stack Overflow用户
提问于 2011-10-05 16:53:59
回答 3查看 10.5K关注 0票数 2

在我的项目中,我们使用solr索引许多不同类型的文档,例如图书和人员,其中包含一些公共字段(如名称)和一些特定于类型的字段(如类别,或属于的组)。

我们想要做的查询,既可以找到书籍,也可以找到人,并为每种文档类型应用了一些过滤器。类似于:

"pangolin"

  • everything
  • 找到所有名字和/或内容
  • 中有"Jean“的书籍和个人,但只有”虚构“和”幻想“
  • 中的书籍,以及只有来自score

的组中的人。

一个非常简单的方法是:

代码语言:javascript
复制
q = name:jean content:jean
&
fq= 
    (type:book AND category:(fiction fantasy)) 
    OR 
    (type:person AND group:pangolin)

但是,遗憾的是,由于fq被缓存,我更喜欢一些允许我更简单、更可重用的fq,比如:

  • fq=type:book
  • fq=type:person
  • fq=category(fiction fantasy)
  • fq=group:pangolin.

有没有一种方法可以告诉solr合并或合并多个查询?类似于“分组”fq在一起。

我读了一些关于使用_query_的嵌套查询的文章,但是很少有关于它的文档让我认为它不是我想要的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-07 07:13:01

正如Geert-Jan在他的回答中提到的那样,在fq之间执行fq的可能性是solr的询问特性,但是到目前为止几乎没有支持:https://issues.apache.org/jira/browse/SOLR-1223

所以我用一种简单的方式来模拟我想要的:

对于文档类型可以拥有的每个字段,我们都必须每次定义一个值(因此,如果在我自己的示例丛书中没有类别,那么在索引时,我们仍然必须使用对多个类型的查询中的其中一个字段使用筛选器来定义类似category=noCategoryCode

  • when的内容,我们在筛选器中添加了一个不存在的条件,因此fq=category:fiction变成了fq=category:fiction (*:* AND -category:*)

通过这种方式,所有其他类型(比如Person)都会通过这个过滤器,并且过滤器是非常原子的,并且经常使用-所以缓存仍然是有用的。

所以,我的全部例子是:

代码语言:javascript
复制
q = name:jean content:jean
&
fq= type:(book person)
&
fq= category:(fiction fantasy) (*:* AND -category:*)
&
fq= group:(pangolin) (*:* AND -group:*)

尽管如此,还是不能等待SOLR-1223修补:)

票数 3
EN

Stack Overflow用户

发布于 2011-10-05 17:48:14

可以同时应用多个筛选器查询。

q=name:jean content:jean&fq=type:book&fq=type:person&fq=category(fiction fantasy)&fq=group:pangolin

票数 0
EN

Stack Overflow用户

发布于 2011-10-06 18:19:26

也许我不理解您的问题,但是查询和过滤器之间唯一的区别是过滤器是缓存的。如果您不关心缓存,只需修改它们的查询:

real query +((type:book category:fiction) (type:person group:pangolin))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7664847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档