【发布时间】:2020-06-15 13:41:44
【问题描述】:
我有 elasticSearch 7.4。我有一个地址模型和条目类型的嵌套模型“部分”:
@Document(indexName = "address", createIndex = true)
public class Address {
@Id
@Field(type = FieldType.Text, store = true)
public String id;
@Field(type = FieldType.Text)
private String fullAddress;
private String regionCode;
private boolean customQuery = true;
private boolean root;
@Field(type = FieldType.Nested, store = true)
private List<Entry> parts;
@Field(type = FieldType.Nested, store = true)
private House house;
}
public class Entry {
private String aoid;
private String aoGuid;
private String code;
private String offName;
private String parentGuid;
private String shortName;
@Field(type = FieldType.Integer)
private Integer aoLevel;
private String postalCode;
}
我想在 Entry 列表中的 AoGuid 字段上写一个搜索:
@Override
public List<Address> findForHouse(String aoguid) {
SearchSourceBuilder builder = new SearchSourceBuilder();
NestedQueryBuilder findByparts = nestedQuery(
"parts",
termQuery("parts.aoGuid", aoguid),
ScoreMode.None);
TermQueryBuilder findByRoot = termQuery("root", true);
QueryBuilder findByIdAndLocation = QueryBuilders.boolQuery()
.filter(findByRoot)
.filter(findByparts);
builder.query(findByIdAndLocation);
String[] strings = new String[]{"address"};
SearchRequest request = new SearchRequest(strings, builder);
try {
restHighLevelClient.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
e.printStackTrace();
}
}
当我调用我的搜索方法时,我得到一个错误:
org.elasticsearch.ElasticsearchStatusException: Elasticsearch 异常 [type=search_phase_execution_exception, reason=all shards 失败] org.elasticsearch.rest.BytesRestResponse.errorFromXContent(BytesRestResponse.java:177) ~[elasticsearch-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1727) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.parseResponseException(RestHighLevelClient.java:1704) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1467) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.search(RestHighLevelClient.java:930) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] 在 ru.evolenta.server.service.elastic.impl.ElasticQueryAddressServiceImpl.findForHouse(ElasticQueryAddressServiceImpl.java:117) 〜[类/:na]在 ru.evolenta.server.service.async.impl.AsyncHouseElasticServiceImpl.lambda$saveFias$1(AsyncHouseElasticServiceImpl.java:45) 〜[类/:na]在 java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) ~[na:1.8.0_201] 在 java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:1.8.0_201] 在 java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) ~[na:1.8.0_201] 在 java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291) ~[na:1.8.0_201] 在 java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) ~[na:1.8.0_201] 在 java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) ~[na:1.8.0_201] 在 java.util.concurrent.ForkJoinTask.doInvoke(ForkJoinTask.java:401) ~[na:1.8.0_201] 在 java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:734) ~[na:1.8.0_201] 在 java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[na:1.8.0_201] 在 java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[na:1.8.0_201] 在 java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[na:1.8.0_201] 在 java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[na:1.8.0_201] 在 java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[na:1.8.0_201] 在 ru.evolenta.server.service.async.impl.AsyncHouseElasticServiceImpl.saveFias(AsyncHouseElasticServiceImpl.java:42) ~[classes/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)~[na:1.8.0_201] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201] 在 org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:338) ~[spring-aop-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197) ~[spring-aop-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115) ~[spring-aop-5.0.4.RELEASE.jar:5.0.4.RELEASE] 在 java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) ~[na:1.8.0_201] 在 java.util.concurrent.FutureTask.run(FutureTask.java) ~[na:1.8.0_201] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_201] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_201] 在 java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_201] 抑制: org.elasticsearch.client.ResponseException:方法 [POST],主机 [http://localhost:9200], URI [/address/_search?typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=query_then_fetch&batched_reduce_size=512&ccs_minimize_roundtrips=true], 状态行 [HTTP/1.1 400 错误请求] {"错误":{"root_cause":[{"type":"query_shard_exception","reason":"失败 创建查询: {\n \"bool\" : {\n \"filter\" : [\n {\n
\"term\" : {\n \"root\" : {\n \"value\" : true,\n \"提升\" : 1.0\n }\n }\n },\n {\n
\"嵌套\" : {\n \"查询\" : {\n \"术语\" : {\n
\"parts.aoGuid\" : {\n \"value\" : \"2d598ce8-feaf-4fb0-9320-bcad370a5d52\",\n \"boost\" : 1.0\n }\n }\n },\n \"path\" : \"parts\",\n \"ignore_unmapped\" : false,\n
\"score_mode\" : \"none\",\n \"boost\" : 1.0\n }\n
}\n ],\n \"adjust_pure_negative\" : true,\n \"boost\" : 1.0\n }\n}","index_uuid":"jqAtS-hiQOS08lKfa1nWqw","index":"address"}],"type":"search_phase_execution_exception","reason":"all 碎片 失败","阶段":"查询","分组":true,"failed_shards":[{"shard":0,"index":"address","node":"G_1M-1l6SOyy7YHWBk2SSQ","reason" :{"type":"query_shard_exception","reason":"失败 创建查询: {\n \"bool\" : {\n \"filter\" : [\n {\n
\"term\" : {\n \"root\" : {\n \"value\" : true,\n \"提升\" : 1.0\n }\n }\n },\n {\n
\"嵌套\" : {\n \"查询\" : {\n \"术语\" : {\n
\"parts.aoGuid\" : {\n \"value\" : \"2d598ce8-feaf-4fb0-9320-bcad370a5d52\",\n \"boost\" : 1.0\n }\n }\n },\n \"path\" : \"parts\",\n \"ignore_unmapped\" : false,\n
\"score_mode\" : \"none\",\n \"boost\" : 1.0\n }\n
}\n ],\n \"adjust_pure_negative\" : true,\n \"boost\" : 1.0\n }\n}","index_uuid":"jqAtS-hiQOS08lKfa1nWqw","index":"address","caused_by":{"type":"illegal_state_exception","reason":"[嵌套] 路径 [parts] 下的嵌套对象不是嵌套的 键入"}}}]},"status":400} 在 org.elasticsearch.client.RestClient.convertResponse(RestClient.java:253) ~[elasticsearch-rest-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestClient.performRequest(RestClient.java:231) ~[elasticsearch-rest-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestClient.performRequest(RestClient.java:205) ~[elasticsearch-rest-client-7.4.0.jar:7.4.0] 在 org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1454) ~[elasticsearch-rest-high-level-client-7.4.0.jar:7.4.0] ... 32 常用框架省略
我该如何解决这个问题?
【问题讨论】:
标签: java elasticsearch spring-data-elasticsearch