我目前正在使用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}
第3次,在最新的回答中尝试了wat页面,惨遭失败
这是wat去solr进行处理
这里的工作方式类似于OR运算符,而不是AND
q=category_name:cat1+_query_:"{!dismax+qf%3Dcategory_name+v%3Dcat2}"
PS:我需要找到关于如何编写 myQuery 的解决方案,请帮忙,坚持下去
它终于解决了, 嵌套+ =“AND 查询:\”{!dismax qf = category_name v =“; 是我的问题的解决方案
现在查询得到处理!! 感谢
答案 0 :(得分:4)
阅读Nested Queries in 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日志,看看哪个URL实际上被发送到Solr,如果这不能按预期工作,并相应调整以获得所需的结果。
更新:已修改,以使查询选项成为AND比较。