簡體   English   中英

如何用Java代碼從Solr中選擇?

[英]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。 (請注意,您的過濾器應作為qfq查詢參數的值,而不是直接作為單獨的查詢參數!)因此,最終查詢將為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM