我将数据保存在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", "test@test.com");
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 中的所有文档(因为它的 *两个字段中的通配符:值)。
parameters.setParam("first_name", "Ann");
无效,因为这会将 first_name=Ann
查询参数添加到网址。 (请注意,您的过滤器应作为 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/