我试图编写一个查询来提升是否有"产品"字段包含两个值中的一个,之前我只关心过一个这样的值。
我之前的查询主要是以下内容:
query({!v=products:PRODUCT1})^2.000
我试图做的是:
query({!v=products:(PRODUCT1 PRODUCT2)})^2.000
默认运算符是OR,所以我认为这可以达到我的预期,但我收到了一条关于"未定义字段的错误消息' PRODUCT2'"。
从那时起,我尝试了许多使用ifs,exists,ors和querys的组合尝试提出一个解决方案,让我能够找到'产品'包含两个值中的一个,我能想到的最好的方法是添加两个单独的查询,并对bf查询进行单独的提升,但这不是首选,因为我只希望实体接收其中一个产品,而不是两者。
我已经搜索了关于如何完成我正在寻找的内容的良好文档,并且迄今为止无法找到我认为对于常见问题的非常简单的解决方案。任何有关此事的帮助都将受到极大的赞赏。
答案 0 :(得分:0)
要使用 bf 参数,您需要将 defType 设置为 eDismax 或 dismax 。有几种方法可以实现您的要求,一种解决方案如下:
if(termfreq(products,"PRODUCT1"),3,if(termfreq(products,"PRODUCT2"),2,1))
如果现场产品包含PRODUCT1,则将其提升3;如果包含PRODUCTS2,则为2,如果不包含PRODUC2,则为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))