<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推薦」?全文檢索庫bluge

          共 1255字,需瀏覽 3分鐘

           ·

          2021-12-24 04:56

          推薦理由

          提到全文檢索庫,第一個想到的就是Java實(shí)現(xiàn)的lucene,今天介紹一款Golang實(shí)現(xiàn)的全文檢索庫bluge。bluge脫胎于Bleve,是當(dāng)前Github比較火的搜索引擎項目zinc的底層索引檢索庫。

          功能介紹

          bluge索引存儲支持內(nèi)存,本地文件,以及擴(kuò)展云存儲等方式,文檔字段類型支持Text, Numeric, Date, Geo Point等。

          查詢檢索支持如下特性:

          1. 支持多種查詢方式:term/phrase/match等基本的全文檢索,數(shù)字/時間范圍查詢;
          2. 聚合函數(shù):Min/Max/Count/Sum/Avg/Weighted Avg;
          3. 匹配高亮。

          使用指南

          安裝

          go?get?github.com/blugelabs/bluge

          代碼示例

          下面是一個簡單的例子:

          package?main

          import?(
          ?"context"
          ?"fmt"
          ?"log"
          ?"time"

          ?"github.com/blugelabs/bluge"
          )

          func?main()?{
          ?//?write?index
          ?writeIndex("./data/bluge/")
          ?//?batch?insert
          ?batch("./data/bluge/")
          ?//?search
          ?search("./data/bluge/")
          }

          //?創(chuàng)建索引
          func?writeIndex(indexPath?string)?{
          ?config?:=?bluge.DefaultConfig(indexPath)
          ?writer,?err?:=?bluge.OpenWriter(config)
          ?if?err?!=?nil?{
          ??log.Fatalf("error?opening?writer:?%v",?err)
          ?}
          ?defer?writer.Close()

          ????//?新建文檔
          ?doc?:=?bluge.NewDocument("example").
          ??AddField(bluge.NewTextField("name",?"bluge")).AddField(bluge.NewDateTimeField("created_at",?time.Now()))

          ?err?=?writer.Update(doc.ID(),?doc)
          ?if?err?!=?nil?{
          ??log.Fatalf("error?updating?document:?%v",?err)
          ?}
          }

          //?批量創(chuàng)建
          func?batch(indexPath?string)?{
          ?writer,?err?:=?bluge.OpenWriter(bluge.DefaultConfig(indexPath))
          ?batch?:=?bluge.NewBatch()
          ?for?i?:=?0;?i?10;?i++?{
          ??doc?:=?bluge.NewDocument(fmt.Sprintf("example_%d",?i)).
          ???AddField(bluge.NewTextField(fmt.Sprintf("field_%d",?i),?fmt.Sprintf("value_%d",?i%2))).AddField(bluge.NewDateTimeField("created_at",?time.Now()))
          ??batch.Insert(doc)
          ?}
          ?err?=?writer.Batch(batch)
          ?if?err?!=?nil?{
          ??log.Fatalf("error?executing?batch:?%v",?err)
          ?}
          ?batch.Reset()
          }

          //?查詢
          func?search(indexPath?string)?{
          ?config?:=?bluge.DefaultConfig(indexPath)
          ?reader,?err?:=?bluge.OpenReader(config)

          ?if?err?!=?nil?{
          ??log.Fatalf("error?getting?index?reader:?%v",?err)
          ?}
          ?defer?reader.Close()

          ?query?:=?bluge.NewMatchQuery("value_1").SetField("field_1")
          ?request?:=?bluge.NewTopNSearch(10,?query).
          ??WithStandardAggregations()
          ?documentMatchIterator,?err?:=?reader.Search(context.Background(),?request)
          ?if?err?!=?nil?{
          ??log.Fatalf("error?executing?search:?%v",?err)
          ?}
          ?match,?err?:=?documentMatchIterator.Next()
          ?for?err?==?nil?&&?match?!=?nil?{
          ??err?=?match.VisitStoredFields(func(field?string,?value?[]byte)?bool?{
          ???fmt.Printf("match:?%s:%s\n",?field,?string(value))
          ???return?true
          ??})
          ??if?err?!=?nil?{
          ???log.Fatalf("error?loading?stored?fields:?%v",?err)
          ??}
          ??fmt.Println(match)
          ??match,?err?=?documentMatchIterator.Next()
          ?}
          ?if?err?!=?nil?{
          ??log.Fatalf("error?iterator?document?matches:?%v",?err)
          ?}
          }

          總結(jié)

          bulge是Golang實(shí)現(xiàn)的全文檢索庫,功能上類似lucene,性能上相比lucene還有些差距,如果對全文檢索感興趣可以把玩把玩。

          參考資料

          1. https://github.com/blugelabs/bluge
          2. https://blugelabs.com/bluge/


          《酷Go推薦》招募:


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

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


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


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



          瀏覽 108
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <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>
                  欧美黄片视频。 | 国产高清无码视频在线 | 在线成人看片免费看黄a | 麻豆国产精品一区 | 人妻摸一摸日日爽一爽,免费视频 |