4

我目前正在研究 solr,在其中创建一个连接,我需要写

http://localhost:8983/solr/select?q=category_name:cat1%20_query_:"{!dismax%20qf=category_name%20v=cat2}"

其中 cat1 和 cat2 是我希望我的产品所在的类别,即所有具有这两个类别的产品。

我使用它得到了准确的结果,我可以找到如何使用 SolrJ api 在 Java 中编写相同的结果

我在做什么

String myQuery = "";
myQuery += "category_name:";
myQuery += categoryNames.get(0);
myQuery += "%20_query_:\"{!dismax%20qf=category_name%20v=";
myQuery += categoryNames.get(1);
myQuery += "}\"";
query.setQuery(myQuery);

这没有给出soln,solr给出错误

现在根据第 1 页

SolrQuery query = new SolrQuery();
query.setQuery("category_name:" + categoryNames.get(0));
String join = "";
join += "{!dismax&qf=category_name&v=";
join += categoryNames.get(1);
join += "}";
query.setParam("_query_", join);
QueryResponse response = solr.query(query);

更好但仍然不起作用,附加我不想要的“&”,从那时起输出是错误的,这是 wat 到 solr 进行处理,结果仅基于“cat1”,而不是两者的 AND

q=category_name:cat1&_query_={!dismax%26qf%3Dcategory_name%26v%3Dcat2}

3rd,尝试了最新答案中建议的 wat 页面,惨遭失败这是 wat 去 solr 进行处理,这里的工作方式类似于 OR 运算符而不是 AND

q=category_name:cat1+_query_:"{!dismax+qf%3Dcategory_name+v%3Dcat2}"

PS:我需要找到关于如何编写myQuery的解决方案,请帮助,坚持下去

它终于解决了,嵌套 += " AND query :\"{!dismax qf=category_name v="; 是我的问题的解决方案

现在查询得到处理!谢谢

4

1 回答 1

4

在阅读了 Solr 中的嵌套查询之后,看起来您的问题与传递已经编码的值有关,因为 SolrJ 将为您编码它们,并且您可能会在问题中使用您的方法进行双重编码。

这是一个修改后的版本,没有应该工作的编码:

SolrQuery query = new SolrQuery();   
String nested = "";
nested += "category_name:";
nested += categoryNames.get(0);
nested += " AND _query_:\"{!dismax qf=category_name v=";
nested += categoryNames.get(1);
nested += "}\"";
query.setQuery(nested);
QueryResponse response = solr.query(query);

您可能需要查看您的 jetty 或 tomcat 日志以查看实际发送到 Solr 的 url,如果这不能按预期工作,并相应地进行调整以获得所需的结果。

更新:修改为使查询选项成为 AND 比较。

于 2011-09-09T12:29:56.820 回答