使用Solrj / Spring Data Solr实现标记和排除过滤器

时间:2013-06-03 13:13:17

标签: solr solrj spring-data-solr

我正在尝试在字段上实现多选的Solr Facet搜索。举个例子:http://docs.lucidworks.com/display/solr/Faceting#Faceting-LocalParametersforFaceting,我想生成对solr的调用:

q=mainquery&fq=status:public&fq={!tag=dt}doctype:pdf&facet=on&facet.field={!ex=dt}doctype

我不知道如何使用solrj(java)调用它,因为我不想添加简单的文件但我需要包含标记和排除(!tag = dt和!ex = dt)。任何想法java代码应该是什么样的?

我正在使用Spring-Data-Solr,这似乎太基本了,无法进行这样的提前调用。所以我认为我需要降低一级并使用solrj。两种解决方案都很棒(solrj或spring-data-solr)

3 个答案:

答案 0 :(得分:3)

以下块应该创建所需的查询字符串。

SimpleFacetQuery query = new SimpleFacetQuery(new SimpleStringCriteria("mainquery"))
  .addFilterQuery(new SimpleQuery(new Criteria("status").is("public")))
  .addFilterQuery(new SimpleQuery(new Criteria("{!tag=dt}doctype").is("pdf")));
query.setFacetOptions(new FacetOptions("{!ex=dt}doctype"));

solrTemplate.queryForFacetPage(query, YourBean.class);

答案 1 :(得分:2)

使用link我可以这样做: -

ModifiableSolrParams params = new ModifiableSolrParams();
params.add("fq", "{!tag=dt}doctype:pdf");
params.add("facet.field", "{!ex=dt}doctype");

答案 2 :(得分:0)

使用 SolrQuery(这是另一个答案中 ModifiableSolrParams 的子类):

solrQuery.addFilterQyery("{!tag=dt}doctype:pdf");
solrQuery.addFacetField("{!ex=dt}doctype");
相关问题