java - 如何在Java代码中从Solr中进行选择?

标签 java solr

我将数据保存在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 查询参数添加到网址。 (请注意,您的过滤器应作为 qfq 查询参数的值,而不是直接作为单独的查询参数!) 因此,最终的查询将是 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/

相关文章:

java - 如何在我的服务器上使用 Lucene

solr - SOLR 中的多值属性分组

java - ObjectAnimator 断断续续的滚动

java - 使用 Java 自动化 Web 操作

java - 使用java打开新窗口

java - 有序列表或集合中的枚举

java - Eclipse:构建项目时 CPU 使用率高

solr - 使用 solrj 时防止 solr 查询注入(inject)

java - 在集成nutch 2.3,Hbase和Solr时花费太多时间进行索引

solr - 模式更改是否需要重新索引所有 Solr 文档或仅包含已更改模式字段的文档?