2011-09-09 106 views
4

我目前正在对Solr的,要在其中创建一个连接,我需要写SolrJ查询,连接查询

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

其中CAT1和CAT2是类别,其中我想我的产品是,即所有那些具有这2个类别的产品。

我正在使用这个精确的结果,通过我可以找到如何使用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); 

这并不给水溶液和Solr的给出错误

现在每页1 ANS

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); 

更好,但还是犯规作品,追加“&”我不想因为那么输出是错误的 这是笏去SOLR处理 此结果出来只是对“CAT1”的基础上,而不是两个

q=category_name:cat1&_query_={!dismax%26qf%3Dcategory_name%26v%3Dcat2} 
AND在最新的应答建议

3,尝试笏页,失败草草收场 这是笏去SOLR处理 这里就像一个OR运算的作品,而不是与

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

PS:我需要找到解决方案如何写更改为MyQuery,请帮助,停留在它

它终于解决了, 嵌套+ = “和查询:\”!{dismax QF = CATEGORY_NAME V =“; 是解决我的问题

现在查询得到处理! 感谢

回答

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); 

你可能需要看看你的码头或Tomcat的日志,看看实际发送的是什么网址到Solr,如果这行不通如预期的那样,并相应调整以获得期望的结果。

更新:修改,使查询选项是和比较。

+0

由于佩奇,我很快就意识到我的错误,我已经去通solrJ wiki页面,但我错过了这个,是我不好,你的解决方案的问题是您的解决方案设置网址参数“&”,然后是查询变化,所以笏以如果我不希望“和”在it..would高度thnakful如果u能heelp我出去 – grandmaster

+0

我刚刚更新了我的回答,以便更好地反映问题呢,我相信。请让我知道这是否适合你。 –

+0

请看看我的编辑,对不起,但问题仍然属于,请帮助先生,卡住 – grandmaster