2016-08-03 49 views
1

我想写一个查询,提高“产品”字段是否包含以前我只关心一个这样的值的两个值之一。有没有可能在SOLR bf查询中查询两个值之一的字段?

我以前的查询基本上如下:

query({!v=products:PRODUCT1})^2.000 

我试图做的是:

query({!v=products:(PRODUCT1 PRODUCT2)})^2.000 

默认运算符是OR,所以我想这会做什么,我预期,但相反,我收到了有关“未定义字段”PRODUCT2“”的错误消息。

从那时起,我尝试了很多使用ifs,exists,ors和querys的组合来试图找出一个解决方案,让我找到'products'是否包含这两个值中的一个,并且我可以想出的办法是添加两个单独的查询,对bf查询进行单独的提升,但这不是优选的,因为我只希望实体获得某个产品的提升,而不是两者。

我已经搜索了很多关于如何完成我正在寻找的文档的优秀文档,并且迄今为止一直无法找到我认为是常见问题的一个非常简单的解决方案。任何有关此事的帮助都将受到极大的赞赏。

回答

0

为了使用你需要设置DEFTYPEeDismaxBF参数dismax。有几种方法来完成你要问什么,一个解决方案是:

if(termfreq(products,"PRODUCT1"),3,if(termfreq(products,"PRODUCT2"),2,1)) 

其中外地产品将通过3的情况下,如果它包含产品2提振它包含产品1,2和1,如果它也不包含任何一个。显然,这只是一个例子,可以根据您的需求进行更改。请在完整查询下面找到。

https://<MY_SERVER_NAME>:9443/solr/<MY_COLLECTION>/select?q=*%3A*&wt=json&indent=true&defType=edismax&bf=if(termfreq(products%2C%22PRODUCT1%22)%2C3%2Cif(termfreq(products%2C%22PRODUCT2%22)%2C2%2C0))