java - ElasticSearch 从多个位置获取具有一个值的数据

标签 java spring-boot elasticsearch

我有这样的结构:

{
   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/

相关文章:

java.lang.StringIndexOutOfBoundsException : when using PolyUtil. 解码

java - 如何让 JavaFX 控件在初始化后立即实现它的 localBounds?

java - Spring boot websocket发送jsonstring

spring-boot - 如何启动、停止和重新连接 spring rabbitmq listener 容器及其连接?

elasticsearch - “empty” elasticsearch incompatible-snapshots文件是否正常?

sorting - ElasticSearch排序不起作用

java - 如何在 android 的 java 中将 char 转换为 int

java - Spring MVC : URL Pattern

java - 没有使用 mockmvc 的请求映射

elasticsearch - 字符串字段中所有 token 的ElasticSearch聚合