账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    请问ES中使用 JAVA API 怎么查询 字段值为数组类型
    34
    0

    问题描述

    RT
    ES 结构如下 :

    {
    "has_hot_act": 1, "tags": ["59224b430926a862244afc7b", "57faf0a10926a8459c6f1389"]
    }
    {
    "has_hot_act": 1, "tags": [],act[]
    }
    请问如何使用ES java API 判断数组是否为空 和 查询tag数组 ?

    问题出现的环境背景及自己尝试过哪些方法

    网上找了很多资料都不行。

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)
    我自己尝试的方法是 :
    booleanQuery.mustNot(QueryBuilders.termQuery("tags", "[]"));
    booleanQuery.mustNot(QueryBuilders.termQuery("tags", new ArrayList<>()));
    查询数组必须不为空 可是 还是查询出来 空数组了。

    你期待的结果是什么?实际看到的错误信息又是什么?

    希望大神出来指点一下 非常捉急。。。不胜感激。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 元旦2号 普通会员 1楼

      在ES中,你可以使用Java API来查询字符串字段的值,但是你需要先将其转换为数组。以下是一个示例:

      ```java import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchRequest; import org.elasticsearch.search.SearchResponse;

      public class ElasticsearchExample { public static void main(String[] args) throws Exception { RestHighLevelClient client = new RestHighLevelClient();

          // 创建一个查询请求,使用索引名称和查询字符串
          SearchRequest searchRequest = new SearchRequest("your_index_name");
          searchRequest.query(QueryBuilders.matchQuery("your_field_name", "array"));
      
          // 创建一个搜索响应
          SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
      
          // 打印搜索结果
          for (SearchHit hit : searchResponse.getHits()) {
              System.out.println(hit.getSourceAsString());
          }
      }
      

      } ```

      在这个示例中,我们首先创建了一个SearchRequest对象,然后使用这个对象来构建一个SearchQuery对象,这个查询对象指定了我们要搜索的索引和我们要查询的字段。然后,我们创建了一个SearchResponse对象,并使用这个对象来获取搜索结果。

      注意,你需要将"your_index_name"和"your_field_name"替换为你的实际索引名称和字段名称。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部