Go語言操作RediSearch進行搜索方法示例詳解
引言
RediSearch是一個支持搜索功能的redis模塊。本文對此模塊進行了介紹,并用go語言實現(xiàn)了一個簡單示例。
RediSearch提供了查詢、二級索引、全文索引功能。你需要先在相關Redis條目上建立索引,然后才能使用RediSearch進行查詢。
RediSearch使用了壓縮算法和倒序索引算法,使得其在性能和內存占用上都有很好的表現(xiàn)。它可以支持精確匹配、模糊匹配、數(shù)字過濾等功能。
docker-compose方式安裝
新建docker-compose.yml文件,內容如下:
# redis-stack version: '3.1' services: redis-stack: image: redis/redis-stack-server:latest ports: - 6380:6379 volumes: - ./data:/data
執(zhí)行命令來啟動容器:
docker-compose up -d
用Go語言操作RediSearch
redissearch-go是一個支持RediSearch的go語言客戶端,使用起來很簡單。下面寫一個簡單的示例:
func TestRedisSearch(t *testing.T) { // 連接 conn := redisearch.NewClient("localhost:6380", "tangshi") // 定義索引 sc := redisearch.NewSchema(redisearch.DefaultOptions).AddField(redisearch.NewTextFieldOptions("title", redisearch.TextFieldOptions{Weight: 5.0, Sortable: true})).AddField(redisearch.NewTextField("content")) // 刪除現(xiàn)有索引 conn.Drop() // 創(chuàng)建索引 err := conn.CreateIndex(sc) assert.Equal(t, err, nil) // 添加文檔 doc1 := redisearch.NewDocument("doc1", 1.0) doc1.Set("title", "春曉").Set("content", "春眠不覺曉,處處聞啼鳥。夜來風雨聲,花落知多少。") doc2 := redisearch.NewDocument("doc2", 1.0) doc2.Set("title", "春夜喜雨").Set("content", "好雨知時節(jié),當春乃發(fā)生。隨風潛入夜,潤物細無聲。") doc3 := redisearch.NewDocument("doc3", 1.0) doc3.Set("title", "春夜洛城聞笛").Set("content", "誰家玉笛暗飛聲,散入春風滿洛城。此夜曲中聞折柳,何人不起故園情。") doc4 := redisearch.NewDocument("doc4", 1.0) doc4.Set("title", "江雪").Set("content", "千山鳥飛絕,萬徑人蹤滅。孤舟蓑笠翁,獨釣寒江雪。") doc5 := redisearch.NewDocument("doc5", 1.0) doc5.Set("title", "望廬山瀑布").Set("content", "日照香爐生紫煙,遙看瀑布掛前川。飛流直下三千尺,疑是銀河落九天。") // 為索引添加文檔 err = conn.IndexOptions(redisearch.DefaultIndexingOptions, []redisearch.Document{doc1, doc2, doc3, doc4, doc5}...) assert.Equal(t, err, nil) time.Sleep(time.Millisecond * 100) // 搜索 瀑布 docs, total, err := conn.Search(redisearch.NewQuery("*瀑布*").Limit(0, 5).SetReturnFields("title", "content")) assert.Equal(t, err, nil) assert.Equal(t, total, 1) assert.Equal(t, docs[0].Properties["title"], "望廬山瀑布") // 搜索 春 docs, total, err = conn.Search(redisearch.NewQuery("*春*").Limit(0, 5).SetReturnFields("title", "content").SetSortBy("title", true)) assert.Equal(t, err, nil) assert.Equal(t, total, 3) assert.Equal(t, docs[0].Properties["title"], "春夜喜雨") for _, item := range docs { t.Log(item.Properties["title"], item.Properties["content"]) } }
在上面的代碼中,我們創(chuàng)建了一個名為tangshi的索引,然后添加了5個文檔。接下來,我們分別搜索了 瀑布 和 春,并測試了搜索結果。
RediSearch使用場景
和Eleasticsearch、Solr等搜索引擎相比,RediSearch的功能還是比較簡單的,它并不是要替代這些專業(yè)的搜索引擎,并不適用于所有場景。
它主要適用于以下一些場景:
- 數(shù)據(jù)量不大,所有索引內容可以被放進內存中。由于redis的數(shù)據(jù)都存儲在內存中,如果索引數(shù)據(jù)內容過大,可能不適合使用RediSearch。
- Ephemeral indexing,即臨時索引,索引內容不需要長期存儲。
如果有想詳細了解的,可以查閱一下下面列出的參考資料。
參考資料
以上就是Go語言操作RediSearch進行搜索方法示例詳解的詳細內容,更多關于Go操作RediSearch搜索的資料請關注腳本之家其它相關文章!
相關文章
redis-cli創(chuàng)建redis集群的實現(xiàn)
本文主要介紹了redis-cli創(chuàng)建redis集群的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-06-06