国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何使用ElasticSearch存儲和查詢數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了如何使用ElasticSearch存儲和查詢數(shù)據(jù)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 引言

在大多數(shù)的場景里,存儲數(shù)據(jù)都是用MySQL這類關(guān)系型數(shù)據(jù)庫,這類數(shù)據(jù)庫的特點(diǎn)是數(shù)據(jù)存儲安全性和一致性高,可以用于事務(wù)操作,但是隨著數(shù)據(jù)量的增加,查詢的速度也會隨之降低,并且其擴(kuò)展能力有限,因此在日志記錄和查詢等場景下,MySQL就顯得力不從心,為了解決對海量數(shù)據(jù)的搜索、分析和計(jì)算,引入ES(ElasticSearch)搜索引擎。

對于IOT領(lǐng)域,記錄設(shè)備的控制日志非常的有必要,對于客訴排查或者之后的數(shù)據(jù)分析起著很重要的作用;假如共有100w的設(shè)備,一天控制5次,那一年的數(shù)據(jù):

100w * 5 * 365 = 9

因此,為了更為較好地存儲和查詢數(shù)據(jù),對于這種大量增加的數(shù)據(jù)建議用es來存儲。

2. ES使用

接下來就介紹一下,如何利用SpringBoot框架聯(lián)合es存儲和查詢數(shù)據(jù)。

  • 首先引入依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    <version>2.7.4</version>
</dependency>

通過引入依賴之后,就可以使用SpringBoot提供的ElasticsearchRestTemplate模版類,在該類中有著很多方法,很方便使用。

  • 配置文件,配置es連接
server:
  port: 8080

spring:
  elasticsearch:
    rest:
      uris: http://127.0.0.1:9200  
#      username:     #用戶名
#      password:     #密碼
      connection-timeout: 6000
      read-timeout: 6000
  • 接著在使用的地方注入ElasticsearchRestTemplate
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
  • 保存數(shù)據(jù),使用es提供save方法
elasticsearchRestTemplate.save(saveBO, getIndex(index_name));

// getIndex() 方法
private IndexCoordinates getIndex(String index) {
    return IndexCoordinates.of(index);
}

在save方法中共有兩個(gè)入?yún)?,第一個(gè)參數(shù)就是自己想存儲的數(shù)據(jù),里面的字段根據(jù)業(yè)務(wù)自定義,第二參數(shù)就是定義一個(gè)在es中的索引,其索引就像MySQL中的表名字。

  • 查詢es中的數(shù)據(jù)
public List query(QueryParam queryParam){
    // 構(gòu)建查詢的條件
    BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
    
    // 查詢條件1:設(shè)備id
    if (!StringUtil.isEmpty(queryParam.getApplianceId())) {
        queryBuilder.filter(QueryBuilders.termQuery("applianceId.keyword", queryParam.getApplianceId()));
    }
    
    // 查詢條件2:時(shí)間區(qū)效(開始時(shí)間&結(jié)速時(shí)間需同時(shí)傳輸才生效)
    if (queryParam.getOperateBeginDate() != null && queryParam.getOperateEndDate() != null) {
        queryBuilder.filter(QueryBuilders.rangeQuery("operateDate").timeZone("Asia/Shanghai")                   .gte(queryParam.getOperateBeginDate()).lte(queryParam.getOperateEndDate()));
    }

    // 實(shí)現(xiàn)查詢條件組裝,設(shè)置分頁中的起始頁和每頁大小。
    NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
        .withQuery(queryBuilder)
        .withPageable(PageRequest.of(queryParam.getPageNo(), queryParam.getPageSize()))
        .withSorts(SortBuilders.fieldSort("operateDate").order(SortOrder.DESC))
        .build();
    
	// 使用elasticsearchRestTemplate.search查詢數(shù)據(jù)
    SearchHits<QueryResult> search = elasticsearchRestTemplate.search(nativeSearchQuery, QueryResult.class, getIndex("index_name"));
    
	// 提取其中的數(shù)據(jù),提出存儲的數(shù)據(jù)QueryResult
    List<QueryResult> list = search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList());
}

在查詢方法中,首先使用BoolQueryBuilder來構(gòu)建查詢的條件,在代碼中使用設(shè)備id和時(shí)間進(jìn)行過濾;使用NativeSearchQueryBuilder構(gòu)建好查詢條件、分頁和降序排序;接著使用elasticsearchRestTemplate.search()查詢結(jié)果;最后使用search.getSearchHits().stream().map(SearchHit::getContent).collect(Collectors.toList())對查詢的結(jié)果進(jìn)行提取。

3. 小結(jié)

通過以上的步驟就可以使用es存儲和查詢數(shù)據(jù),其中elasticsearchRestTemplate集成度高,只需定義好入?yún)⒑统鰠⒓纯?,其他基本都是模塊化操作,非常簡單方便。知道了如何使用,其里面的原理也需要了解下,有機(jī)會再探索下。文章來源地址http://www.zghlxwxcb.cn/news/detail-632525.html

到了這里,關(guān)于如何使用ElasticSearch存儲和查詢數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Elasticsearch:如何在 Elasticsearch 中存儲復(fù)雜的關(guān)系數(shù)據(jù)

    Elasticsearch:如何在 Elasticsearch 中存儲復(fù)雜的關(guān)系數(shù)據(jù)

    在傳統(tǒng)的數(shù)據(jù)庫中,對數(shù)據(jù)關(guān)系的描述無外乎三種:一對一、一對多和多對多關(guān)系。 如果有關(guān)系相關(guān)的數(shù)據(jù),我們一般在建表的時(shí)候加上主外鍵。 建立數(shù)據(jù)鏈接,然后在查詢或者統(tǒng)計(jì)中通過 join 恢復(fù)或者補(bǔ)全數(shù)據(jù),最后得到我們需要的結(jié)果數(shù)據(jù),然后轉(zhuǎn)換到 Elasticsearch中,如

    2024年02月05日
    瀏覽(19)
  • 【ElasticSearch】ElasticSearch Java API的使用——常用索引、文檔、查詢操作(二)

    Elaticsearch ,簡稱為es,es是一個(gè)開源的 高擴(kuò)展 的 分布式全文檢索引擎 ,它可以近乎 實(shí)時(shí)的存儲 、 檢索數(shù)據(jù); 本身擴(kuò)展性很好,可以擴(kuò)展到上百臺服務(wù)器,處理PB級別(大數(shù)據(jù)時(shí)代)的數(shù)據(jù)。es也使用java開發(fā)并使用Lucene作為其核心來實(shí)現(xiàn)所有索引和搜索的功能,但是它的 目的

    2024年01月16日
    瀏覽(124)
  • Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)以及索引保存數(shù)據(jù)

    Java操作elasticSearch復(fù)雜查詢以及解析數(shù)據(jù)以及索引保存數(shù)據(jù)

    說明:基于銀行測試庫的操作 es的銀行測試庫,看一個(gè)Kibana操作 然后用java檢索解析這個(gè)數(shù)據(jù) 聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均薪資 以下是分解思路實(shí)現(xiàn)步驟: #聚合搜索 address 中包含 mill 的所有人的年齡分布以及平均年齡 GET bank/_search { “query”:{ “

    2024年02月10日
    瀏覽(27)
  • 【ElasticSearch】 ElasticSearch serverless架構(gòu)介紹(查詢寫入分離,計(jì)算存儲分離)

    【ElasticSearch】 ElasticSearch serverless架構(gòu)介紹(查詢寫入分離,計(jì)算存儲分離)

    ElasticSearch 推出了全新的serverless架構(gòu),將查詢(search)和寫入(indexing)分離,將計(jì)算(computing)和存儲(storage)分離,極大提高了 ES 的可運(yùn)維性,降低了學(xué)習(xí)成本。本文將先介紹下serverless含義,再介紹ElasticSearch serverless架構(gòu)。 在serverless架構(gòu)下,用戶只需關(guān)注業(yè)務(wù)邏輯,無需管理服務(wù)

    2024年01月24日
    瀏覽(23)
  • [elasticsearch]使用postman來查詢數(shù)據(jù)

    [elasticsearch]使用postman來查詢數(shù)據(jù)

    最近需要debug程序,debug的時(shí)候需要查找elasticsearch里面的數(shù)據(jù)是否正確。 第一步建立一個(gè)post請求,并按照圖下的方式填上ur和參數(shù): 發(fā)送post請求,url為: 我這里查詢的是title字段。 如果需要用戶名和密碼,需要這樣填寫: 填寫用戶名和密碼: 然后點(diǎn)擊send就可以獲取數(shù)據(jù)啦

    2024年02月07日
    瀏覽(21)
  • Elasticsearch如何做到數(shù)十億數(shù)據(jù)查詢毫秒級響應(yīng)?

    Elasticsearch如何做到數(shù)十億數(shù)據(jù)查詢毫秒級響應(yīng)?

    如果面試的時(shí)候碰到這樣一個(gè)面試題:ES 在數(shù)據(jù)量很大的情況下(數(shù)十億級別)如何提高查詢效率? 這個(gè)問題說白了,就是看你有沒有實(shí)際用過 ES,因?yàn)樯叮科鋵?shí) ES 性能并沒有你想象中那么好的。 很多時(shí)候數(shù)據(jù)量大了,特別是有幾億條數(shù)據(jù)的時(shí)候,可能你會懵逼的發(fā)現(xiàn),跑

    2024年02月03日
    瀏覽(21)
  • Elasticsearch的子聚合查詢和使用SpringDataElasticSearch如何實(shí)現(xiàn)三級的子查詢

    Elasticsearch的子聚合查詢和使用SpringDataElasticSearch如何實(shí)現(xiàn)三級的子查詢

    文檔中存在字段year(年),volume(卷),issue(期)三個(gè)字段,現(xiàn)有需求如下:需要先根據(jù)year進(jìn)行聚合并且降序,然后根據(jù)volume字段在年聚合后再次聚合,issue字段則在以上兩字段的聚合后再次聚合,效果圖如下: 檢索結(jié)果: 實(shí)現(xiàn)效果: https://www.elastic.co/guide/en/elasticsearch/reference/7.17/

    2024年02月16日
    瀏覽(15)
  • java使用ElasticSearch的scroll查詢,高效的解決es查詢數(shù)量的限制。

    (1)首先我們要明白es的查詢機(jī)制:ES的搜索是分2個(gè)階段進(jìn)行的,即 Query階段和Fetch階段 。 Query階段 比較輕量級,通過查詢倒排索引,獲取滿足查詢結(jié)果的文檔ID列表。 Fetch階段 比較重,需要將每個(gè)分片的查詢結(jié)果取回,在協(xié)調(diào)結(jié)點(diǎn)進(jìn)行 全局 排序。 通過From+size這種方式分批

    2024年02月03日
    瀏覽(42)
  • 向量數(shù)據(jù)庫:使用Elasticsearch實(shí)現(xiàn)向量數(shù)據(jù)存儲與搜索

    Here’s the table of contents: ??Elasticsearch在7.x的版本中支持 向量檢索 。在向量函數(shù)的計(jì)算過程中,會對所有匹配的文檔進(jìn)行線性掃描。因此,查詢預(yù)計(jì)時(shí)間會隨著匹配文檔的數(shù)量線性增長。出于這個(gè)原因,建議使用查詢參數(shù)來限制匹配文檔的數(shù)量(類似二次查找的邏輯,先使

    2024年02月07日
    瀏覽(98)
  • [大數(shù)據(jù)][elasticsearch]使用curl進(jìn)行的簡單查詢

    curl: ?-X :指定http的請求方式,有HEAD、GET、POST、PUT、DELETE ?-d :指定要傳輸?shù)臄?shù)據(jù) ?-H :指定http的請求頭信息 curl -XPUT http://ip:port/索引名?pretty-- 創(chuàng)建索引 curl -XGET http://ip:port/_cat/indices?v --查看當(dāng)前es的所有索引信息 curl -XGET http://ip:port/索引名?pretty ?--查看單個(gè)索引信息 curl -XDE

    2024年02月11日
    瀏覽(100)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包