Java 使用Spring数据解决方案的构建块连接父查询条件
我有一个包含父子文档的Solr核心,我想构建动态查询来搜索这些文档 我正在使用Java 使用Spring数据解决方案的构建块连接父查询条件,java,spring,solr,spring-data,spring-data-solr,Java,Spring,Solr,Spring Data,Spring Data Solr,我有一个包含父子文档的Solr核心,我想构建动态查询来搜索这些文档 我正在使用Spring Data solr并希望使用Criteria类来构建这样的查询,以搜索特定的子文档并接收我使用块连接父查询的完整父级+子级 工作查询示例: q {!parent which=object_type:shipping_order}invoicenumber:31920000 fl *,[child parentFilter=object_type:shipping_order] 我尝试了不同的方法来
Spring Data solr
并希望使用Criteria类来构建这样的查询,以搜索特定的子文档并接收我使用块连接父查询的完整父级+子级
工作查询示例:
q {!parent which=object_type:shipping_order}invoicenumber:31920000
fl *,[child parentFilter=object_type:shipping_order]
我尝试了不同的方法来连接这个criteria对象来构建这样的查询,但我没有找到一个好方法
下面是在springdatasolr
中构建这样一个查询的尝试,但它不起作用
Criteria invoiceNumberCritera= new Criteria("invoicenumber").is("31920000");
Criteria doctypeCriteria = new Criteria("doctype").is("Invoice");
SimpleQuery query = new SimpleQuery("{!parent which=object_type:shipping_order}");
query.addCriteria(invoiceNumberCritera);
query.addCriteria(doctypeCriteria);
query.addProjectionOnField(new SimpleField("*"));
query.addProjectionOnField(new SimpleField("[child parentFilter=object_type:shipping_order]"));
堆栈跟踪:
Caused by: org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://localhost:8983/solr: org.apache.solr.search.SyntaxError: Cannot parse ' AND invoiceNumber:31920000 AND doctype:Invoice': Encountered " <AND> "AND "" at line 1, column 1.
Was expecting one of:
<NOT> ...
"+" ...
"-" ...
<BAREOPER> ...
"(" ...
"*" ...
<QUOTED> ...
<TERM> ...
<PREFIXTERM> ...
<WILDTERM> ...
<REGEXPTERM> ...
"[" ...
"{" ...
<LPARAMS> ...
"filter(" ...
<NUMBER> ...
<TERM> ...
at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:649) ~[solr-solrj-8.1.1.jar:8.1.1 fcbe46c28cef11bc058779afba09521de1b19bef - ab - 2019-05-22 15:20:04]
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:255) ~[solr-solrj-8.1.1.jar:8.1.1 fcbe46c28cef11bc058779afba09521de1b19bef - ab - 2019-05-22 15:20:04]
at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:244) ~[solr-solrj-8.1.1.jar:8.1.1 fcbe46c28cef11bc058779afba09521de1b19bef - ab - 2019-05-22 15:20:04]
at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:207) ~[solr-solrj-8.1.1.jar:8.1.1 fcbe46c28cef11bc058779afba09521de1b19bef - ab - 2019-05-22 15:20:04]
at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:1019) ~[solr-solrj-8.1.1.jar:8.1.1 fcbe46c28cef11bc058779afba09521de1b19bef - ab - 2019-05-22 15:20:04]
at org.springframework.data.solr.core.SolrTemplate.lambda$executeSolrQuery$9(SolrTemplate.java:519) ~[spring-data-solr-4.0.9.RELEASE.jar:4.0.9.RELEASE]
at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:167) ~[spring-data-solr-4.0.9.RELEASE.jar:4.0.9.RELEASE]
... 68 common frames omitted
你能解决这个问题吗?
Criteria fieldCriteria = Criteria.where("invoiceNumber").is("300230");
blockJoinCritera.addCriteria(fieldCriteria);