1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        「GoCN酷Go推薦」?全文檢索庫bluge

        共 1255字,需瀏覽 3分鐘

         ·

        2021-12-24 04:56

        推薦理由

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

        功能介紹

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

        查詢檢索支持如下特性:

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

        使用指南

        安裝

        go?get?github.com/blugelabs/bluge

        代碼示例

        下面是一個(gè)簡單的例子:

        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ū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫或者好的項(xiàng)目,然后寫一點(diǎn)這個(gè)庫使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到

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


        大概規(guī)則和每日新聞?lì)愃?,如果?bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名!戳「閱讀原文」,即可報(bào)名


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



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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            女厕蹲坑偷拍嘘嘘高清精品 | 欧美二级片 | 亚洲永久色| 亚洲金品 | 小静好湿好紧太爽视频 | 国产尤物精品在线 | 免费看黄色片app | 性欧美18—19sex性高清 | 国产一级毛片网站 | 国产操逼网站 |