elasticsearch 数组包含查询

这篇具有很好参考价值的文章主要介绍了elasticsearch 数组包含查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数组类型

默认情况下,任何字段都可以包含零个或多个值,当包含多个值时,它就表示array了。但是,数组中的所有值必须具有相同的数据类型(要么同为字符串,要么同为整型,不能数组中一些值为字符串,另一些值为整型)。

在Kinbana中使用:

mapping映射创建索引:

PUT /user_index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "keyword"
      },
      "loves": {
        "type": "keyword"
      }
    }
  }
}

添加数据:

PUT /user_index/_doc/1
{
  "name": "孙悟空",
  "loves":["打八戒","吃桃子","紫霞仙子"]
}

查询其中一段信息:

GET /user_index/_search
{
  "query": {
        "term": {
          "loves": {
            "value": "紫霞仙子"
          }
      }
    }
}

查询结果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.39556286,
    "hits" : [
      {
        "_index" : "user_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.39556286,
        "_source" : {
          "name" : "孙悟空",
          "loves" : [
            "打八戒",
            "吃桃子",
            "紫霞仙子"
          ]
        }
      }
    ]
  }
}

在代码中使用:

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
class SearchApplicationTests {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**************************创建索引***************************/
    @Test
    public void CreateIndex() throws IOException {
        CreateIndexRequest request = new CreateIndexRequest("user_index");
        request.source(UserMappings.MAPPING_TEMPLATE, XContentType.JSON);
        CreateIndexResponse response = restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
    }
    /************************查询索引是否存在**********************/
    @Test
    public void ExitIndex() throws IOException{
        GetIndexRequest request = new GetIndexRequest("user_index");
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        if (exists){
            log.info("存在索引");
        }
    }
    /**************************添加数据***************************/
    @Test
    public void CreateDoc() throws IOException{
        List<String> loves = new ArrayList<>();
        loves.add("打八戒");
        loves.add("吃桃子");
        loves.add("紫霞仙子");
        User user = new User();
        user.setName("孙悟空");
        user.setLoves(loves);
        IndexRequest request = new IndexRequest("user_index");
        request.id("1");
        request.timeout(TimeValue.timeValueSeconds(5));
        request.source(JSON.toJSONString(user),XContentType.JSON);
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
    /**************************查询文档***************************/
    @Test
    public void SearchDoc() throws IOException{
        SearchRequest request = new SearchRequest("user_index");
        request.source().query(QueryBuilders.termQuery("loves","紫霞仙子"));
        SearchResponse search = restHighLevelClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        for (SearchHit hit : hits) {
            String json = hit.getSourceAsString();
            User user = JSON.parseObject(json, User.class);
            log.info("用户信息:{}",user);
        }
    }
}

打印结果:

elasticsearch 数组包含查询

 文章来源地址https://www.toymoban.com/news/detail-506469.html

到了这里,关于elasticsearch 数组包含查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch(019):es常见的字段映射类型之数组类型(arrays)

    在Elasticsearch中,没有专用的array数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值都必须具有相同的数据类型。 这一点是区别于nested的,nested指的对象的集合。而arrays则是单一类型的数组集合而已。 此外,不需要专门的类型类定义数组类型

    2024年02月13日
    浏览(45)
  • mysql 5.7 json 类型 json 数组类型 普通字符串类型 10w数据 查询速度差异

    建表语句ddl 10w 数据 插入 存储过程  json 类型 vs 普通字符串类型 建表语句ddl CREATE TABLE tb_json_array_test ( id INT NOT NULL AUTO_INCREMENT, user_no VARCHAR(100), user_name VARCHAR(100), score INT, create_time date, update_time date, remark VARCHAR(100), field1 VARCHAR(100), field2 VARCHAR(100), field3 VARCHAR(100), field4 VARCHAR(

    2024年02月04日
    浏览(52)
  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(70)
  • Elasticsearch 查询革新:探索 Wildcard 类型的高效模糊匹配策略

    在生产使用中,Elasticsearch 除了精确匹配的要求,也会有模糊查询的场景。 面对这种问题 ,传统的解决方案有两种: 2.1 方案一:ngram 分词器 使用 ngram 分词器对存入的数据进行精细化的拆分,利用细颗粒度的 token 进行快速的召回。 这是一个利用空间换时间的方案,细化查询

    2024年02月04日
    浏览(40)
  • Elasticsearch 基于 array 结构 的nested类型的索引的聚合查询

    这几天在做es的聚合查询,对那种一对多的产品数据查询的时候遇到了一些问题,做一下记录 针对每个产品名称[ product_name ]进行分组,并对预算[ budget ]求和 产品名称 预算 电视机 4000 手机 851 相机 5000 扑克牌 2 es查询语句==简化版 es查询的结果==简化版 注意电视机的doc_count为

    2024年02月16日
    浏览(59)
  • leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

    目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和

    2024年02月10日
    浏览(47)
  • 一个数组是否包含另一个数组

    //两个数组对象中查看 其中一个数组对象是否包含另一个数组对象中的值 let arr = [ {key:1,val:\\\"张胜男\\\"}, {key:2,val:\\\"王五\\\"}, {key:3,val:\\\"李四\\\"}, {key:4,val:\\\"刘超\\\"}, {key:5,val:\\\"赵四\\\"} ] let arr2 = [ {key:1,val:\\\"张胜男\\\"}, {key:2,val:\\\"王五\\\"}, {key:6,val:\\\"666\\\"}, {key:7,val:\\\"777\\\"}, {key:8,val:\\\"888\\\"}, {key:9,val:\\\"999\\\"}, ]

    2024年02月09日
    浏览(45)
  • shell数组(包含排序算法)

    目录 一:数组定义方法 1、方法一 2、方法二 ​3、方法三 ​4、方法四  5、判断数组是否完整 (1)方法一 (2)方法二:通过脚本 二:获取数组值 1、获取数组长度  2、获取数组数据列表 3、获取数组下标列表 4、读取某下标赋值 ​5、数组遍历  6、求数组所有的数值的和

    2024年02月04日
    浏览(73)
  • C# 数据类型与类型转换:包含教程与示例

    C# 中的变量必须是指定的数据类型: 数据类型指定了变量值的大小和类型。 使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有: 整数类型: int :4 字节,范围从 -2,147,483,648 到 2,

    2024年01月18日
    浏览(43)
  • Linux系统设置默认用户为root并自动登录(详解,包含Centos及Ubuntu系统)

    打开 /etc/gdm/custom.conf vi /etc/gdm/custom.conf或者nano /etc/gdm/custom.conf(看自己熟练哪个用哪个命令) 在文件 [daemon] 下写入( 注意:在这个下面写入,别的地方写入无效! ): AutomaticLoginEnable=True AutomaticLogin=root 然后保存出来重启Reboot 打开终端开启root账户,设置密码 : sudo passwd  r

    2024年02月06日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包