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中object类型与nested类型以及数组之间的区别

    0、一般情况下用object 类型来查es中为json对象的字段数据,用nested来查es中为JsonArray数组类型的字段数据。 1、默认情况下ES会把JSON对象直接映射为object类型,只有手动设置才会映射为nested类型 2、object类型可以直接使用普通的逗号(.)查询,比如 3、nested类型的查询需要使用

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

    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日
    浏览(11)
  • 如何使用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日
    浏览(13)
  • Elasticsearch 查询革新:探索 Wildcard 类型的高效模糊匹配策略

    Elasticsearch 查询革新:探索 Wildcard 类型的高效模糊匹配策略

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

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

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

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

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

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

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

    //两个数组对象中查看 其中一个数组对象是否包含另一个数组对象中的值 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日
    浏览(8)
  • shell数组(包含排序算法)

    shell数组(包含排序算法)

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

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

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

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

    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日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包