在我的项目中,我们使用solr索引许多不同类型的文档,例如图书和人员,其中包含一些公共字段(如名称)和一些特定于类型的字段(如类别,或属于的组)。
我们想要做的查询,既可以找到书籍,也可以找到人,并为每种文档类型应用了一些过滤器。类似于:
"pangolin"
的组中的人。
一个非常简单的方法是:
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_的嵌套查询的文章,但是很少有关于它的文档让我认为它不是我想要的解决方案。
发布于 2011-10-07 07:13:01
正如Geert-Jan在他的回答中提到的那样,在fq之间执行fq的可能性是solr的询问特性,但是到目前为止几乎没有支持:https://issues.apache.org/jira/browse/SOLR-1223。
所以我用一种简单的方式来模拟我想要的:
对于文档类型可以拥有的每个字段,我们都必须每次定义一个值(因此,如果在我自己的示例丛书中没有类别,那么在索引时,我们仍然必须使用对多个类型的查询中的其中一个字段使用筛选器来定义类似category=noCategoryCode
fq=category:fiction变成了fq=category:fiction (*:* AND -category:*)。
通过这种方式,所有其他类型(比如Person)都会通过这个过滤器,并且过滤器是非常原子的,并且经常使用-所以缓存仍然是有用的。
所以,我的全部例子是:
q = name:jean content:jean
&
fq= type:(book person)
&
fq= category:(fiction fantasy) (*:* AND -category:*)
&
fq= group:(pangolin) (*:* AND -group:*)尽管如此,还是不能等待SOLR-1223修补:)
发布于 2011-10-05 17:48:14
可以同时应用多个筛选器查询。
q=name:jean content:jean&fq=type:book&fq=type:person&fq=category(fiction fantasy)&fq=group:pangolin
发布于 2011-10-06 18:19:26
也许我不理解您的问题,但是查询和过滤器之间唯一的区别是过滤器是缓存的。如果您不关心缓存,只需修改它们的查询:
real query +((type:book category:fiction) (type:person group:pangolin))
https://stackoverflow.com/questions/7664847
复制相似问题