[英]How to select from Solr in Java code?
我将数据保存在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.setParam("first_name", "Ann1");
我有相同的结果。 怎么了?
parameters.setQuery("*:*");
会在网址中添加q=*:*
,并且此查询与solr中的所有文档匹配(因为这两个field:value中的*通配符char)。
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");
搜索基于setQuery(“ : ”);中的查询进行
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setFields("id","first_name","last_name");
query.setStart(0);
query.setRows(100);
QueryResponse response = server.query(query);
SolrDocumentList docResults = response.getResults();
您的查询应该在setQuery方法中,并且setFields()将仅在指定的字段上进行搜索。
您正在搜索*:*,因此它将返回所有文档。 setParam(“ first_name”,“ Ann”)无效。 如下更改代码。
SolrQuery query = new SolrQuery();
query.setQuery("first_name:Ann1");
应使用:
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.addFilterQuery("first_name:qwe*", "last_name:qwe*");
query.setFields("id","first_name","last_name","email");
QueryResponse response = null;
try {
response = solrServer.query(query);
} catch (SolrServerException e) {e.printStackTrace();}
SolrDocumentList list = response.getResults();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.