精华内容
下载资源
问答
  • elasticsearch通过顶部多索引,实现联合查询
    万次阅读 热门讨论
    2019-05-06 15:15:38

    一、前言

          之前试了下多索引查询,就是索引以数组的方式进行查询,发现这种方式是可以的。但是如果两个索引的名字,字段都不相同,可以实现类似于mysql的那种join效果吗,试试吧

    elasticsearch的多索引联合查询以及范围日期查询示例

    背景:使用es-php + es7.0

    二、正文

    1、首先索引部分还是以数组的形式

     'index' => ['zeusa.evony.com.accesslog-2019.03.28','zeusa.evony.com.accesslog-2019.03.29','users'],
    

    2、进行普通查询

    这一步发现了问题,就是如果要根据条件查询的话,那么多个索引之间必须有相同的条件字段才行,总结就是:
    (1)、写法就是用数组的方式
    (2)、注意type必须保持一致,不然会查不到
    (3)、如果有条件,那么条件字段要保证每个索引中都有
    (4)、查询出来的代码如下:

       [89]=>
          array(5) {
            ["_index"]=>
            string(5) "user1"
            ["_type"]=>
            string(3) "doc"
            ["_id"]=>
            string(20) "6CgEWGoBSw5ta76v3QnC"
            ["_score"]=>
            float(1)
            ["_source"]=>
            array(2) {
              ["@timestamp"]=>
              string(20) "2019-03-28T11:23:52Z"
              ["user_id"]=>
              int(299)
            }
          }
          [90]=>
          array(5) {
            ["_index"]=>
            string(36) "accesslog-2019.03.28"
            ["_type"]=>
            string(3) "doc"
            ["_id"]=>
            string(20) "3yEKxGkB18T84ql3g4oq"
            ["_score"]=>
            float(1)
            ["_source"]=>
            array(1) {
              ["@timestamp"]=>
              string(24) "2019-03-28T11:23:36.020Z"
            }
          }
    
    

    3、优缺点

          可以看出来是两个索引下的数据,查出来之后是分散的数组。对于这种查询方式,最佳的用法是不同索引的结构完全相同,比如日志索引access_20190426access_20190427,这种结构相同的情况下,进行多索引联合查询是很合适的。

    优点:

    1、 对结构相同或者大部分字段相同的索引,可以使用这种方式进行多索引联合查询
    2、 直接查询出来的就是数组,根据索引名处理下数组即可。还可以直接在查询出来的基础上进行聚合操作

    缺点:

    1、 如果索引的字段不同,就比如这里的user1和accesslog-2019.03.28,查询结果是出来了,但是如果要进行聚合操作,那么只能各自聚合各自的字段,不能进行子聚合。
    2、 查询条件必须同时符合多个索引,但在业务层面,比如mysql的联表查询中,并不是要求每个表都必须遵循相同的查询条件的,可能只是a.id=b.id的关联关系。

    三、如果要实现类似于mysql的联合查询

          首先,我们都知道,mysql做联合查询,表的字段都是有关联的,那么使用上面这种方式肯定是不行的,或者局限性很大。不可能让关联的索引保持字段都一致,业务上也说不过去。

    1、网上的方案

    网上的方案一般分为四种,这里参考: https://blog.csdn.net/laoyang360/article/details/79774481
    (1)、应用端关联
    (2)、宽表冗余存储(Data denormalization)
    (3)、嵌套文档(Nested)存储
    (4)、父子文档存储

          如果数据量不是很大的话,使用客户端join,也就是在业务层面查询两次也能实现类似于join的操作。如果数据量适中,多个索引之间联系紧密,比如博客和评论的关系,那么是可以考虑Nested&Join方式的,只是比较影响性能。nested 类型检索使得检索效率慢几倍,父子Join 类型检索会使得检索效率慢几百倍。

          如果你多索引是类似于博客表和用户表关联,关系不是很紧密且数据量很大的话,最好是采用宽表的方式。如果业务端对查询性能要求很高的话,还是建议使用宽表化处理的方式,这样也可以比较好地应对聚合的需求。在索引阶段需要做join处理,查询阶段可能需要做去重处理,分页方式可能也得权衡考虑下。

    2、其次

          我们要知道,ES和大多数的nosql相似,想要处理mysql这种关联关系还是有些强人所难了。最好是在设计阶段就尽量设计成扁平化的文档模型,用拼接json的方式去处理数据,而不是还按照传统关系型数据库的思维去使用ES。性能和关联关系不可兼得,ES既然选择了性能,那就别嫌弃它处理关联不方便吧。

          博主的需求是分析日志于用户之间的关系,最终选用的方案是宽表模式,也就是咱们常说的数据冗余。毕竟数据量挺大的,采用其他方案都很影响效率。这个大家仁者见仁智者见智了,总之要改变自己的思维,关联起来太难了!

    end

    更多相关内容
  • Elasticsearch 可以用于:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索;实时分析的分布式搜索引擎;可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。 Elasticsearch的文件存储   ...
  • ES 的跨索引查询详细讲解

    万次阅读 2020-12-20 00:21:32
    序言Elasticsearch,中文名直译弹性搜索,不仅仅在单索引内部分片层面弹性搜索,更强的是在跨索引外围支持分片弹性搜索,同比其它分布式数据产品,此特性更鲜明,代表了 Elastic 集群架构设计的优越性。本文将从以下...

    序言

    Elasticsearch,中文名直译弹性搜索,不仅仅在单索引内部分片层面弹性搜索,更强的是在跨索引外围支持分片弹性搜索,同比其它分布式数据产品,此特性更鲜明,代表了 Elastic 集群架构设计的优越性。

    本文将从以下几个方面展开探讨:为什么需要跨索引查询?

    跨索查询有哪些经典应用场景?

    跨索引查询技术原理是怎样的?

    跨索引查询有哪些注意事项?

    图示:跨索引示意图 + 多个索引查询效果图

    为什么需要跨索引查询

    技术限制

    Elasticsearch 索引本身有一些指标限制,对于很多新手来说最容易忽视或者乱用。Elastic 索引数据量有大小限制;

    单个分片数据容量官方建议不超过 50GB,合理范围是 20GB~40GB 之间;

    单个分片数据条数不超过约 21 亿条(2 的 32 次方),此值一般很难达到,基本可以忽略,背后原理可以参考源码或者其它;

    索引分片过多,分布式资源消耗越大,查询响应越慢。

    基于以上限制,索引在创建之前就需要依据业务场景估算,设置合理的分片数,不能过多也不能过少。

    技术便利

    在基于关系型数据库的应用场景中,数据量过大,一般会采用分库分表策略,查询数据时基于第三方中间件,限制多多;在基于 NoSQL 的应用场景中,如 MongoDB,数据量过大,会采用数据产品本身提供的分片特性,查询数据时基于自身的路由机制。

    无论是分库分表还是分片,它们只解决了一维数据的存储与查询,二维的不能,如电商订单系统场景,数据库采用多库多表拆分,一旦容量超过预期设计,需要二次拆分继续分库分表;MongoDB 采用多分片拆分,一旦容量超过预计设计,需要继续扩展分片节点。

    以上对于 Elasticsearch 可以不用这样,它提供了两个维度的拆分方式,第一维度采用多个索引命名拆分,第二维度采用索引多分片,对于查询来说,可以灵活匹配索引,一次指定一个索引,也可以一次指定多个索引。

    图示:ES 查询示意图 + 多索引 + 多分片示意图

    跨索引查询应用场景

    IT 应用中,除去技术本身局限问题,多数的问题都是由于耦合造成的,“高内聚,低耦合”一直是我们 IT 从业者的座右铭。应用系统耦合,就成了单体应用,然后就延伸出微服务架构理念。同样数据耦合,我们也要基于一定维度的微服务化,或垂直或水平或混合垂直水平。

    业务系统

    举例某些业务场景,实时数据与历史数据存储和查询问题,假设日均数据量超过千万条,那么月度数量超过 3 亿条,年度也会超过 36 亿条。

    若采用 Elasticsearch 存储,则可以按月 / 按季度 / 按年度 创建索引,这样实时数据的更新只会影响当前的索引,不影响历史的索引;查询时也一样,依据查询条件指定索引名称,按需要扫描查询,无需每次扫描所有的数据。这比基于传统的数据产品灵活很多。

    图示:实时数据与历史数据业务场景

    大数据

    Elasticsearch 在大数据应用场景下很受欢迎,已经成为大数据平台对外提供结果查询的标配。大数据平台需要定期计算数据,将结果数据批量写入到 Elasticsearch 中,供业务系统查询,由于部分业务规则设定,Elasticsearch 原来的索引数据要全部删除,并重新写入,这种操作很频繁。对于大数据平台每次全量计算,代价很大,对于 Elasticsearch 平台,超大索引数据频繁删除重建,代价也很大。

    基于以上,采用多索引方式,如按照月份拆解,依据需要删除的月份索引数据。同样的问题,业务系统查询时,非常灵活指定需要的月份索引数据,这样保证了存储与查询的平衡。

    图示:大数据平台写数据到 Elastic 平台示意图

    日志

    Elasticsearch 应对这个日志场景非常擅长,诞生了著名的 ELK 组合,比如一个大中型的业务系统,每天日志量几十 TB/ 几百 TB 很正常,可按天或者按小时或者更小粒度创建索引,通常查询日志只会查询最近时间的,过去很久的日志,偶然需要查询几次,甚至会删除。所以对于此场景,Elasticsearch 的跨索引查询非常便利,程序编写也很简单。

    跨索引查询应用方式

    Elasticsearch 跨索引查询的方式可依据业务场景灵活选择,下面介绍几种:

    直接型

    明确指定多个索引名称,这种方式一般应用在非常精确的查询场景下,便于查询索引范围,性能平衡考虑,若索引不存在会出现错误,如下:index_01,index_02

    GET /index_01,index_02/_search

    {

    "query" : {

    "match": {

    "test": "data"

    }

    }

    }

    模糊型

    不限定死索引名称,这种方式一般采用通配符,无需判断该索引是否存在,支持前匹配、后匹配,前后匹配,如下:index_* 匹配前缀一样的所有索引

    GET /index_*/_search

    {

    "query" : {

    "match": {

    "test": "data"

    }

    }

    }

    计算型

    索引名称通过计算表达式指定,类似正则表达式,也可以同时指定多个索引,如下:logstash-{now/d}表示当前日期

    # 索引名称如:index-2024.03.22

    # GET //_search

    GET /%3Cindex-%7Bnow%2Fd%7D%3E/_search{

    "query" : {

    "match": {

    "test": "data"

    }

    }

    }

    跨索引查询技术原理

    Elasticsearch 能够做到跨索引查询,离不开其架构设计以及相关实现原理。

    索引分片

    图示:索引由分片组成索引是一个虚拟的数据集合,索引由多个分片组成;

    分片存储实际的数据;

    索引分片数量不限制。

    查询过程

    图示:索引查询阶段

    图示:取回数据阶段

    查询过程简单说来就是分发与合并:查询分发,客户端发送请求到协调节点,协调节点分发查询请求到索引分片节点;

    数据合并,索引分片节点将数据发送到协调节点,协调节点合并返回客户端。

    所以说,Elasticsearch 提供跨索引查询的能力,实际上与原来单索引查询时一样,本质上是跨多个分片查询,然后合并。

    跨索引查询注意事项

    索引与分片等价关系

    索引与分片等价的关系,1 个索引 20 分片与 4 个索引每个索引 5 个分片理论上是等价的,鉴于索引分片的容量限制与性能平衡,在面对需要跨索引业务场景时,索引的数量与分片的数量尽量的少,既要保障索引热点数据的实时处理能力,也要平衡历史数据的查询性能。

    协调节点分离

    鉴于 Elastic 查询过程,在跨多个索引查询时,协调节点承担了所有分片查询返回的数据合并,需要消耗很大资源,在应对高并发场景,建议部署独立的协调节点,将集群的数据节点与协调节点分离,以达到最佳的性能平衡。

    路由机制

    Elasticsearch 写入数据分布默认是基于索引主键 _id 的 Hash 值,此机制在数据分布上很均衡,但也没有什么规律,对于跨索引查询场景,若自定义指定路由键,可以在搜索时避开不需要的索引分片,有效减少分片查询的分片数量,达到更高的性能。

    总结

    Elasticsearch 由于其架构设计的弹性能力,小小的一个跨索引查询特性,就能给我们应用系统带来很多架构设计的便利,解决很多实际场景问题,这是其它数据产品目前还做不到的。Elasticsearch 还有更厉害的跨多个集群跨多个版本,详情可继续关注笔者下一篇文章的探讨。

    还是那句话,Elastic 用得好,下班下得早。

    展开全文
  • 首先,博主这边要用ES来代替传统的mysql操作,那么原来的表联合查询操作自然也要转换为多索引联合查找。这里使用elasticsearch-php库来操作ES,原生的ES也是大同小异的。 日期查询优秀文章参考: 1、 自定义日期格式...

    一、前言

          首先,博主这边要用ES来代替传统的mysql操作,那么原来的多表联合查询操作自然也要转换为多索引联合查找。这里使用elasticsearch-php库来操作ES,原生的ES也是大同小异的。

    日期查询优秀文章参考:

    1、 自定义日期格式以及ES内置的日期格式

    官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html
    优秀博客:
    https://blog.csdn.net/u011019726/article/details/69541946
    https://blog.csdn.net/gui66497/article/details/80433693
    2、 日期问题,可能是需要先设置好mapping才能 查

    链接:https://blog.csdn.net/weixin_36270623/article/details/84794652 (这个在新建索引的时候最好就设置好)

    二、正文示例

          一直听说ES的日期查询有个坑,那就是时区问题,现在终于轮到我碰到了,有点期待呢。记录一下。 这里我本地刚开始是搜索不到的,传过来的日期参数形如:2019-03-28 11:23:52。后来看到kibana中显示:02/Apr/2019:18:18:20 -0700,所以试着在原来2019-03-29T01:43:01.368Z的基础上加上7小时,发现可以搜索到了。这是因为在数据入库的时候,没有指定时区为asia/shanghai,而ES默认选择时区为UTC,因此存储的数据和本地的json数据存在时间差7小时。

    1、多索引联合日期范围查询

    代码:

       $params = [
                'index' => ['zeusa.evony.com.accesslog-2019.03.28','zeusa.evony.com.accesslog-2019.03.29'], 
                'type' => 'doc',
                'body' => [
                    'from'=>10,
                    'size'=>20,  
       	"_source"=>[
                        "includes"=>[ "pixel*"],
                       // "excludes"=> [ "*.description" ]
                    ],
                    'query' => [
                            "range" =>[
                                    "@timestamp" => [   
                                    "gt" => "2019-03-28T23:58:56.052Z", 
                                    "lt" =>"2019-03-29T23:58:56.052Z",  
                                    "time_zone" =>"+07:00",
                                ]
                            ] 
                    ]
                ]
            ];
      $repos =  $this->client->search($params);
            $arr = [];
            foreach($repos['hits']['hits'] as $v)
            {
                $arr[] = $v['_source'];
            }
    

    解释:
    (1)多索引查询: 多索引一起用,逗号隔开以数组的形式传过去,实测可以。根据业务把索引名拼成一个数组传进去即可
    (2)关于size: 默认只查出来10条,可以自己控制条数,单默认设置不超过10000条。如果要获取查询的数量,设置为0即可。
    如果要查询的数据很多,参考:https://blog.csdn.net/bushanyantanzhe/article/details/79109721 设置max_result_window参数即可
    (3)关于查询字段: 字段名称要和kibana中看到的ES数据名称保持一致,比如这个字段前面的@一定要有,因为kibana中的字段是有@
    (4)时间日期格式: 格式要和元数据的格式保持一致,不能是简单的2019-03-28 11:23:52,要么查询不出来数据,要不就会报错:

    failed to parse date field [2019-03-28 11:23:52] with format [strict_date_optional_time||epoch_millis]: [Text '2019-03-28 11:23:52' could not be parsed, unparsed text found at index 10
    

    (5)时间日期部分: 查询的时候,可以不精确到最后的sss,一样可以正常查询出来.但必须要带上TZ,不然会报错:

    failed to parse date field [2019-03-29 08:43:11] withformat[strict_date_optional_time||epoch_millis
    

    这里的TZ参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html ,直接搜索 strict_date_time 即可找到该定义
    (6)time_zone: 经过反复测试,这个字段没起到作用。可能是我的问题,欢迎指导,谢谢
    (7)_source: 这部分是为了筛选数据,因为正常查询出来的数据总是含有很多无用的字段,我们做分析只需要部分字段即可。所以可以通过_source的"includes“属性
    规定返回的字段,”excludes"属性规定哪部分不反悔。我这里要查询的字段都有个前缀pixel,例如pixel.user_id等,所以使用pixel.*过滤。
    参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/docs-get.html#get-source-filtering

    2、如果要精准查询,替换range为:

      "bool"=>[
                    "filter" =>[
                        "term" => [ "@timestamp" =>"2019-03-29T08:43:11.274Z" ]
                     ]
                ]
    

    注意: 如果想要精准匹配,那就要用term,这样只会查出user_id=2478的记录。如果是用match查询,那么会查出所有带有user_id=2478的记录,也就是会有很多,比如 xxxxx&user_id=2478xxxxx 也会查出来。

    3、格式化日期加上7小时

      $start = "2019-03-28 16:48:11";       //转化搜索的时间为TZ格式,并且加上7小时 date('Y-m-d H:i:s',strtotime("$start+7hour")));
       $st_arr = explode(' ',date('Y-m-d H:i:s',strtotime("$start+7hour")));
       $start = $st_arr[0].'T'.$st_arr[1].'Z';
    

    关于日期可以参考:https://blog.csdn.net/li_lening/article/details/80930323

          以上就是关于elasticsearch的多索引查询以及范围日期查询的内容,多索引的关键是用数组的方式传过去,源码部分会遍历这个索引数组,分别查询组合。日期查询的关键是时区转换,其他的就是DSL的标准格式了。

    end

    展开全文
  • Elasticsearch 7.7版中跨索引查询

    千次阅读 2021-07-16 14:57:37
    In elastic search version 7.7, multiple _types in the index is removed,Now If we want to query across multiple index, we are doing in the following way./index1,index2/_search?q=type:tweetIn 7.7, what ...

    In elastic search version 7.7, multiple _types in the index is removed,

    Now If we want to query across multiple index, we are doing in the following way.

    /index1,index2/_search?q=type:tweet

    In 7.7, what is the best way to query from multiple indexes using Transport Java API?

    Edited :

    1) Say I have two indexes, "user" and "tweet" I want to search both the index - user and tweet like below

    If I want to query the "user" index on the field as {"username" = "Opster"}

    and in "tweet" index on the field as {"data" = "some_text"}

    Is this possible?

    2) I understand, each index is a separate partition in elastic search but How does the search across indexes work internally in elastic search?

    Thanks,

    Harry

    解决方案

    I think the below code should help. Note that you can create TransportClient client instance as mentioned in this link

    In order to execute the search using the Java API, the below code should help:

    SearchResponse response = client.prepareSearch("index1", "index2")

    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)

    .setQuery(QueryBuilders.termQuery("type", "tweet")) // Query

    .setFrom(0).setSize(60) // Set whatever size you'd want

    .get();

    Some of the below useful API links:

    Note: ES recommends people to migrate to Java Rest Client as mentioned in this link and this guide should help you as how you can migrate from Java API to using the REST Client.

    Updated Answer:

    Assuming that I have two indexes

    user having field username with value Opster

    tweet having field data with value some text

    For the sake of simplicity I have made both the fields keyword type

    What you are looking for would be as below

    In Elasticsearch's Query DSL:

    POST /_search

    {

    "query": {

    "bool": {

    "should": [

    {

    "bool": {

    "must": [

    {

    "term": {

    "_index": "user"

    }

    },

    {

    "term": {

    "username": "Opster"

    }

    }

    ]

    }

    },

    {

    "bool": {

    "must": [

    {

    "term": {

    "_index": "tweet"

    }

    },

    {

    "term": {

    "data": "some text"

    }

    }

    ]

    }

    }

    ]

    }

    }

    }

    Java API:

    import java.net.InetAddress;

    import java.net.UnknownHostException;

    import org.elasticsearch.action.search.SearchResponse;

    import org.elasticsearch.action.search.SearchType;

    import org.elasticsearch.client.transport.TransportClient;

    import org.elasticsearch.common.settings.Settings;

    import org.elasticsearch.common.transport.TransportAddress;

    import org.elasticsearch.index.query.BoolQueryBuilder;

    import org.elasticsearch.index.query.QueryBuilder;

    import org.elasticsearch.index.query.QueryBuilders;

    import org.elasticsearch.transport.client.PreBuiltTransportClient;

    public class QueryForMultipleIndexes {

    public static void main(String[] args) throws UnknownHostException {

    // on startup

    TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)

    .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

    QueryBuilder firstQuery = new BoolQueryBuilder()

    .must(QueryBuilders.termQuery("_index", "user"))

    .must(QueryBuilders.termQuery("username", "Opster"));

    QueryBuilder secondQuery = new BoolQueryBuilder()

    .must(QueryBuilders.termQuery("_index", "tweet"))

    .must(QueryBuilders.termQuery("data", "some text"));

    //This is the should clause which in turn contains two must clause

    QueryBuilder mainQuery = new BoolQueryBuilder()

    .minimumShouldMatch(1)

    .should(firstQuery).should(secondQuery);

    SearchResponse response = client.prepareSearch("*")

    .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)

    .setQuery(mainQuery)

    .setFrom(0).setSize(60)

    .get();

    System.out.println(response.getHits().getTotalHits());

    // on shutdown

    client.close();

    }

    }

    Below is what should appear in the output/console:

    2 hits

    Let me know if this helps!

    展开全文
  • 想在ElasticSearch中通过dsl实现与下面sql语句相等的效果: select user_name,user_code from table1 where user_name like '张%' union all select usrname as user_name,usrcode as user_code from table2 where ...
  • public class ESTest_Doc_Query { public static void main(String... //创建ES客户端 RestHighLevelClient esClient = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost",9200,"http")) ...
  • 如果我们需要查询索引比较并且没有什么规律的话,就会面临一个尴尬的局面,超过URL的长度限制; 二、测试环境 elasticsearch 6.8.12 测试数据 新增三个测试的index,每个index里边一个document; PUT test1/_...
  • 请问下面的查询sql 用es 是否能实现(数据都在同一个索引里面,同个索引不同数据之间的联合查询) SELECT count(1),t1.group_id FROM user_info t1 JOIN user_info t2 ON t1.person_id = t2.person_id WHERE...
  • es组合个条件进行查询

    千次阅读 2020-12-29 07:59:21
    GET /test_index/_search{"query": {"bool": {"must": { "match": { "name": "tom" }},"should": [{ "match": { "hired": true }},{ "bool": {"must": { "match": { "personality": "good" }},"must_no...
  • elasticsearch多索引的数据联查

    万次阅读 热门讨论 2019-01-16 14:36:39
    1.数据入库 PUT /my_index/user/1 { "name": "John Smith", ... "dob": "1970/10/24" } PUT /your_index/blogpost/2 ...2.my_index库和your_index库一句查询语句查出 GET /my_index,your_index/_search
  • 最近在做项目的时候,遇到一个问题,要访问不同索引(可以当成分库去理解),如果是用直接请求的方式很容易做到,但是用了spring-data-elasticsearch好像不是很好实现,在网上看到基本上都是indexName直接赋值。...
  • Spring Boot Elasticsearch高级查询实现-ES索引别名聚合查询 引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elastic...
  • spring data elasticsearch多索引查询

    千次阅读 2018-10-06 11:50:00
    一次查询多索引数据 es里可以这样写 GET 索引1,索引2,索引3/_search 也可以这样 给索引创建别名,索引可以使用一个别名 POST /_aliases { "actions": [ { "add": { "index": "myindex2", ...
  • ElasticSearch-多索引检索与批量操作

    万次阅读 2017-10-19 17:18:59
    如果你需要从ElasticSearch中检索很文档,那么使用multi_get或者mgetAPI来将这些检索请求放在一个请求中,将比逐个文档请求更快的检索到全部文档。mgetAPI要求有一个docs数组作为参数,每个元素包含检索文档的元...
  • price索引有【id,price,date,hotel_id】 price索引里面的hotel_id与hotel索引里面的id是对应关系,并且hotel里面的一个文档可以对应price索引里面的个文档【即:一对】; 问题: 在这样的场景下,如何实现...
  • 在我们的实际工作中,我们有可能会遇到这样的情况,我们想在 Kibana 的 Discover 中同时搜索两个不同的索引,当时我们并不想把这两个索引导入到一个索引中,那么我们该如何处理这种情况呢? 假如我们有如下的两个...
  • java 操作es多索引查询的时候,可不可以首先指定一个索引查询条件,然后在进行多索引查询
  • 松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里...关系型数据库中的联合查询需求在 Es 中可以用它们来解决。视频:如果大家觉得视频风格还能接受,也可以看看松哥的付费视频:Spring Boot+Vue+...
  • Elasticsearch系列---聚合查询(一)

    千次阅读 2021-02-06 18:33:27
    概要Elasticsearch的聚合查询,跟数据库的聚合查询效果是一样的,我们可以将二者拿来对比学习,如求和、求平均值、求最大最小等等。基础概念bucket数据分组,一些数据按照某个字段进行bucket划分,这个字段值相同的...
  • 本文同时发布在我的个人博客之前尝试了用mysql做大规模数据的检索优化,可以...这种情况下mysql就有点力不从心了,复杂的索引类型,在多索引检索的时候对每个字段单独建索引于事无补,而联合索引无法在如此复杂的...
  • 我想要实现查询,通过java代码能实现吗? es的ELK和springboot整合的查询的经验 希望老铁们给点建议, 提供具体方法或者对我开发有用的建议的话,必有重谢。
  • 简介:⼿把⼿玩转es的聚合查询之桶聚合ES聚合分析聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索...
  • ElasticSearch索引结构、存储原理
  • 一、开始创建索引您可以通过 Elasticsearch 的 RESTFul API 来创建索引:PUT http://127.0.0.1:9200/commodity注意:默认情况下,创建的索引分片数量是 5 个,副本数量是 1 个。您可以通过如下参数来指定分片数、...
  • Elasticsearch中,实现像数据库中的联合唯一性索引,有没有好的解决方案呀?
  • Elasticsearch索引原理

    2021-12-03 17:23:33
    Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎 Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎. 当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能...
  • Elasticsearch多索引类别。

    千次阅读 2017-09-14 19:58:28
    博文中的内容来源《Elasticsearch权威指南(中文版)》这一本书,感激不尽。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,500
精华内容 3,400
关键字:

es 多索引联合查询