<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          「GoCN酷Go推薦」Golang的Ealstic鏈接庫

          共 2101字,需瀏覽 5分鐘

           ·

          2022-01-14 05:18

          背景介紹

          Elasticsearch是一個分布式、高擴展、高實時的搜索與數(shù)據(jù)分析引擎,用于海量文檔的搜索。有些項目會將Elasticsearch當(dāng)做存儲海量數(shù)據(jù)的數(shù)據(jù)庫使用,可見其查詢性能之高效。作為面向文檔的搜索引擎,Elasticsearch比起傳統(tǒng)數(shù)據(jù)庫更偏向于結(jié)構(gòu)化數(shù)據(jù)的高效查詢,其獨特的倒排索引更能將查詢性能提升至極致。在大數(shù)據(jù)微服務(wù)時代,Elasticsearch在海量數(shù)據(jù)搜索、數(shù)據(jù)挖掘、人工智能領(lǐng)域都起到了關(guān)鍵作用。

          安? ?裝

          ?go?get?"github.com/olivere/elastic/v7"

          Elasticsearch的數(shù)據(jù)來源通常來自于Logstash等數(shù)據(jù)采集中間件,作為golang項目來說,其查詢功能的使用更加普遍。此文章以V7版本為例來介紹如何使用golang對Elasticsearch進行查詢。

          開源庫的使用

          連接客戶端構(gòu)建

          import?elasticv7?"github.com/olivere/elastic/v7"

          address?:=?[]string{"http://127.0.0.1:9200"}
          cli,?err?:=?elasticv7.NewClient(
          ?elasticv7.SetURL(address...),
          ?elasticv7.SetBasicAuth("elastic",?"123456"),
          ?elasticv7.SetSniff(false),
          )
          • address 為集群的地址
          • SetBaseicAuth 接受UserName和Password作為參數(shù)完成校驗
          • Sniff參數(shù)為true,創(chuàng)建的客戶端會去嗅探整個集群,此動作會使用內(nèi)網(wǎng)IP通信,導(dǎo)致無法連接到ES服務(wù)器,這里設(shè)置為false。

          創(chuàng)建查詢語句

          精確查詢

          //?單值查詢
          elasticv7.NewTermQuery("key","value")

          //?多值查詢
          elasticv7.NewTermsQuery("key",?[]string{"value1","value2"}...)

          精確查詢要注意字符串類型的匹配,若為text字段,將匹配失敗。可以嘗試對"{字段}.keyword"來進行Term查詢

          通配符查詢

          elasticv7.NewWildcardQuery(key,?word)

          通配符查詢通常用于模糊查詢,例如"*xxxx*",等價于mysql中的like "%xxxx%"。

          與查詢

          query?:=?elasticv7.NewBoolQuery()
          query.Must(queries?...)

          與查詢使用BoolQuery的Must函數(shù)來完成,其參數(shù)是類型為query的不定參數(shù)。當(dāng)所有query均為真時此條件為真,可嵌套。

          或查詢

          elasticv7.NewWildcardQuery("",?"")
          query.Should(queries?...)

          與Must相似。

          創(chuàng)建查詢服務(wù)

          search?:=?cli.Search().Index(index_name).Query(query)

          index_name是ES中的索引,類比Mysql相當(dāng)于表Table的概念。query為查詢對象,以上各種查詢可相互嵌套形成最終的查詢對象。

          分頁

          search?=?search.From(10)
          search?=?search.Size(10)

          這里search中的函數(shù)都是鏈式的,可分行寫亦可整行寫。

          排序

          search?=?search.Sort(key,true)

          排序的第一參數(shù)為排序字段,第二參數(shù)為是否正序。

          跳過評分計算

          constantQuery?:=?elasticv7.NewConstantScoreQuery(query)

          評分會降低查詢的效率,當(dāng)不需要時可以跳過。

          總? ?結(jié)

          官方庫需要自己去構(gòu)造查詢的json結(jié)構(gòu),使用起來較為混亂,不易理解。相較而言,此開源庫采用鏈式可嵌套的形式來構(gòu)造查詢對象,使用起來更加清晰便捷。其源碼庫中亦有相當(dāng)多的各類函數(shù)和對象用于各種條件查詢,此次只是摘取本人使用時設(shè)計過的些許功能加以介紹。

          參考資料

          1、https://segmentfault.com/a/1190000039140870

          2、https://pkg.go.dev/github.com/elastic/go-elasticsearch/[email protected]/esapi


          《酷Go推薦》招募:


          各位Gopher同學(xué),最近我們社區(qū)打算推出一個類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個庫或者好的項目,然后寫一點這個庫使用方法或者優(yōu)點之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到

          新的庫,并且知道怎么用。


          大概規(guī)則和每日新聞類似,如果報名人多的話每個人一個月輪到一次,歡迎大家報名!戳「閱讀原文」,即可報名


          掃碼也可以加入 GoCN 的大家族喲~



          瀏覽 39
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  丁香五月婷婷香 | 欧美成人免费电影 | 午夜激情福利 | 91精品国久久久久久无码一区二区三区 | 成人影片大香蕉 |