我有这样的结构:
{
id: "someId",
age: "15",
metadata: {
otherId: "someOtherId"
}
}
我需要创建query builder
获取我的 dto.providedId == id
所在的所有对象或dto.providedId == metadata.otherId
,
我尝试这样做:
if(dto.getProvidedId() != null){
BoolQueryBuilder boolQueryBuilder= new BoolQueryBuilder();
boolQueryBuilder.must(QueryBuilders.termQuery("id.keyword", dto.getProvidedId()));
boolQueryBuilder.must(QueryBuilders.termQuery("metadata.otherId", dto.getProvidedId()));
}
但它返回给我空数组,我不知道为什么:(
有人可以告诉我该怎么做吗?
{
"index": {
"analysis": {
"analyzer": {
"default": {
"type": "custom",
"filter": [
"lowercase"
],
"tokenizer": "whitespace"
}
}
}
}
}
感谢您的帮助
最佳答案
如果您需要 OR 语义,那么您需要使用 should
而不是 `must``
BoolQueryBuilder boolQueryBuilder= new BoolQueryBuilder();
boolQueryBuilder.minimumShouldMatch(1);
boolQueryBuilder.should(QueryBuilders.termQuery("id.keyword", dto.getProvidedId()));
boolQueryBuilder.should(QueryBuilders.termQuery("metadata.otherId", dto.getProvidedId()));
还要确保检查 metadata.otherId
是否不应为 metadata.otherId.keyword
。
关于java - ElasticSearch 从多个位置获取具有一个值的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68085590/