我将数据保存在Solr中:
String solrUrl = "http://localhost:8984/solr";
SolrServer solrServer = new HttpSolrServer( solrUrl );
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", "1");
doc.addField("first_name", "Ann");
doc.addField("last_name", "Smit");
doc.addField("email", "[email protected]");
try {
solrServer.add(doc);
solrServer.commit();
} catch (SolrServerException e) {/* */}
我想在solr中搜索:
SolrQuery parameters = new SolrQuery();
parameters.setQuery("*:*");
parameters.setParam("first_name", "Ann");
QueryResponse response = null;
try {
response = solrServer.query(parameters);
} catch (SolrServerException e) {/* */ }
SolrDocumentList list = response.getResults();
而且我有1条记录-很好。但是当我设置
parameters.setParam("first_name", "Ann1");
时,我得到相同的结果。怎么了? 最佳答案
parameters.setQuery("*:*");
将q=*:*
添加到url,并且此查询匹配solr中的所有文档(因为在两个field:value中都使用*通配符)。parameters.setParam("first_name", "Ann");
无效,因为这会将first_name=Ann
查询参数添加到url。 (请注意,您的过滤器应该作为q
或fq
查询参数的值,而不是直接作为单独的查询参数!)
因此,最终查询将是q=*:*&first_name=Ann
,以lucene的语言查询所有文档。
如果您尝试仅将文档与first_name==Ann
匹配,则需要尝试?q=first_name:Ann
SolrQuery parameters = new SolrQuery();
parameters.setQuery("first_name:Ann");
关于java - 如何用Java代码从Solr中选择?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27011413/