【发布时间】:2021-03-03 18:05:21
【问题描述】:
我有一个索引,其中我的每个对象都有status 字段,该字段可以有一些预定义的值。我想获取所有这些状态INITIATED、UPDATED、DELETED 的匹配项,因此通过 java 创建了这个查询,我使用 Querybuilder 和 nativeSearchQuery 在控制台上打印,由ElasticsearchOperations 执行:
{
"bool" : {
"must" : [
{
"terms" : {
"status" : [
"INITIATED",
"UPDATED",
"DELETED"
],
"boost" : 1.0
}
}
],
"adjust_pure_negative" : true,
"boost" : 1.0
}
}
我的索引中有“已启动”状态的数据,但没有找到查询中提到的状态的任何人。请问如何解决这个查询?
如果您需要什么,请告诉我。
更新:添加代码
NativeSearchQueryBuilder nativeSearchQueryBuilder=new NativeSearchQueryBuilder();
QueryBuildersingleQb=QueryBuilders.boolQuery().must(QueryBuilders.termsQuery("status",statusList));
Pageable pageable = PageRequest.of(0, 1, Sort.by(Defs.START_TIME).ascending());
FieldSortBuilder sort = SortBuilders.fieldSort(Defs.START_TIME).order(SortOrder.ASC);
nativeSearchQueryBuilder.withQuery(singleQb);
nativeSearchQueryBuilder.withSort(sort);
nativeSearchQueryBuilder.withPageable(pageable);
nativeSearchQueryBuilder.withIndices(Defs.SCHEDULED_MEETING_INDEX);
nativeSearchQueryBuilder.withTypes(Defs.SCHEDULED_MEETING_INDEX);
NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
List<ScheduledMeetingEntity> scheduledList=elasticsearchTemplate.queryForList(searchQuery, ScheduledMeetingEntity.class);
更新 2:示例数据:
I got this from kibana query on this index:
"hits" : [
{
"_index" : "index_name",
"_type" : "type_name",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"createTime" : "2021-03-03T13:09:59.198",
"createTimeInMs" : 1614755399198,
"createdBy" : "user1@domain.com",
"editTime" : "2021-03-03T13:09:59.198",
"editTimeInMs" : 1614755399198,
"editedBy" : "user1@domain.com",
"versionId" : 1,
"id" : "1",
"meetingId" : "47",
"userId" : "129",
"username" : "user1@domain.com",
"recipient" : [
"user1@domain.com"
],
"subject" : "subject",
"body" : "hi there",
"startTime" : "2021-03-04T07:26:00.000",
"endTime" : "2021-03-04T07:30:00.000",
"meetingName" : "name123",
"meetingPlace" : "placeName",
"description" : "sfsafsdafsdf",
"projectName" : "",
"status" : "INITIATED",
"failTry" : 0
}
}
]
【问题讨论】:
-
您能否粘贴一个文档示例作为您的索引?
-
@SusanMustafa,请立即查看,数据已添加
-
尝试做一个简单的termsQuery,只用INITIATED,看看有没有结果?尝试在没有分页的情况下进行操作,看看是否有结果?它也可能是您的映射。是关键字类型吗??还是文字??字段状态? stackoverflow.com/questions/53739370/… TermsQuery 需要使用关键字。我建议你不要自己做映射,而是让 ES 为你做。它将创建关键字和其他所有内容(非常聪明)。
-
我没有映射字段,es 是在程序第一次启动时映射的。因此,根据 es,我猜它们在关键字字段中,因为这是一个单值字段(尽管我没有明确声明为关键字)。我以这种方式为其他人获得了我想要的输出,但这次没有,不知道为什么!您在我的查询中发现任何可疑点吗?
-
不抱歉。请参阅我的简化建议(1 个查询),不要分页,看看你是否得到结果。否则它的 termsQuery 是错误的,或者你的映射。
标签: java spring-boot elasticsearch