使用Spring Data Solr标记字段

时间:2019-03-15 16:12:50

标签: solrj spring-data-solr

我使用的是Spring Data Solr 4.0.5.RELEASE,找不到在我的过滤器查询中正确标记字段以实现类似{!tag=price}price:10之类的方法。这里有一个类似的帖子,并且已接受答案https://stackoverflow.com/a/16903861/10225026,但是当我使用像Criteria.where("{!tag=price}price").isNull()这样的isNull()标准时,此解决方案不起作用。该查询最终是-{!tag=price}price:[* TO *]而不是{!tag=price}-price:[* TO *]

出于相同的原因,在带有标签/键/排除项的字段上无法将FieldWithFacetParameters与参数setMissing(true)一起使用,因为弹簧数据在应为f.{!key=price ex=typeId,modelId,status}price.facet.missing=true时会产生诸如f.price.facet.missing=true的查询。

是否有适当的方法来向查询字段添加标签/键和排除项?

1 个答案:

答案 0 :(得分:0)

我使用以下方法为过滤器查询添加查询标记:

SimpleQuery query = new SimpleFacetQuery();
....
query.addFilterQuery(new SimpleQuery(new Criteria("{!tag=price}-price").isNull()));

对于方面选项:

SimpleFacetQuery query = new SimpleFacetQuery();
...
FacetOptions facetOptions = new FacetOptions();
facetOptions.addFacetOnField("{!key=price ex=typeId,modelId,status}price");

query.setFacetOptions(facetOptions);

要使构面选项起作用,还需要在solrconfig.xml中的请求处理程序默认参数中添加以下内容:

<requestHandler name="/select" class="solr.SearchHandler">
....
<lst name="appends">
  <str name="f.price.facet.missing">true</str>
</lst>
....