在我的项目中,我们使用solr索引许多不同类型的文档,例如Books和Persons,带有一些常见字段(如名称)和一些特定于类型的字段(如类别或组人员)属于)。
我们希望执行可以查找书籍和人员的查询,并为每种文档类型应用一些过滤器。类似的东西:
一种非常简单的方法是:
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合并或组合多个查询?像'{1}}一样'分组'的东西。
我读了一些关于fq
的嵌套查询,但是关于它的文档很少,这让我觉得它不是我正在寻找的解决方案。
答案 0 :(得分:3)
正如Geert-Jan在他的回答中提到的那样,在OR
之间fq
之间的可能性是一个solr ask功能,但现在支持很少: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:)
答案 1 :(得分:0)
您可以同时应用多个过滤器查询
q=name:jean content:jean&fq=type:book&fq=type:person&fq=category(fiction fantasy)&fq=group:pangolin
答案 2 :(得分:0)
也许我不理解您的问题,但查询和过滤器之间的唯一区别是过滤器是缓存的。如果您不关心缓存,只需修改他们的查询:
real query +((type:book category:fiction) (type:person group:pangolin))