dapper分頁查詢(dapper連接sqlite)
Redis Search是一個Redis模塊,它使用壓縮的倒排索引來實現(xiàn)快速的索引和低內(nèi)存占用。Redis Search可以對Redis數(shù)據(jù)進(jìn)行精確短語匹配、模糊搜索、數(shù)值過濾、地理空間篩選等多種搜索功能。Redis Search還支持聚合、高亮、詞干提取、拼寫糾錯等特性。
RediSearch查詢語言類似于SQL,但更加簡潔和靈活。你可以使用RediSearch命令來創(chuàng)建索引、添加文檔、搜索文檔、更新文檔、刪除文檔等。
與elasticsearch的比較
elasticsearch是另一個流行的開源搜索引擎,它也支持全文搜索和聚合功能。那么,Redis Search和elasticsearch有什么區(qū)別和優(yōu)勢呢?
Redis Search是基于內(nèi)存的,它可以提供更高的性能和更低的延遲。elasticsearch則是基于磁盤的,它需要依賴緩存來提高速度。
Redis Search是一個Redis模塊,它可以直接在Redis中運行,無需額外的安裝和配置。elasticsearch則需要單獨部署和管理。
Redis Search支持多種擴(kuò)展模塊,如RedisJSON(用于處理JSON文檔),RedisGraph(用于處理圖數(shù)據(jù)),RedisTimeSeries(用于處理時間序列數(shù)據(jù)),RediSearch(用于處理全文搜索)等。elasticsearch則需要依賴插件來擴(kuò)展其功能。
一、 Redis Search的安裝
有多種方式可以安裝和使用Redis Search,最簡單的方式是使用Redis Stack Docker鏡像,它已經(jīng)集成了Redis和多個模塊,包括Redis Search。只需運行一條命令,就可以在本地創(chuàng)建一個RediSearch容器:
要連接到這個實例,運行:
二、 Redis Search的使用
要使用Redis Search,你首先需要在Redis數(shù)據(jù)上聲明索引,然后使用RediSearch查詢語言來查詢這些數(shù)據(jù)。
1、創(chuàng)建索引
要創(chuàng)建一個索引,你需要使用FT.CREATE命令,并指定索引名、索引選項和字段名。例如,要創(chuàng)建一個名為blog的索引,用于存儲博客文章的標(biāo)題、內(nèi)容和標(biāo)簽,你可以運行:
這個命令會創(chuàng)建一個名為blog的索引,它會自動索引所有以blog:為前綴的散列鍵。它還會指定三個字段:title(文本類型,權(quán)重為5.0),content(文本類型,權(quán)重為1.0)和tags(標(biāo)簽類型,分隔符為逗號)。
2、添加文檔
要添加一個文檔到索引中,你需要使用FT.ADD命令,并指定文檔ID、字段值和分?jǐn)?shù)。例如,要添加一篇博客文章到blog索引中,你可以運行:
這個命令會添加一個ID為blog:1的文檔到blog索引中,并給它一個分?jǐn)?shù)為1.0(默認(rèn)為1.0)。它還會指定三個字段的值:title為"Hello Redis Search",content為"This is a blog post about Redis Search, a query and full-text search engine for Redis.“,tags為"redis,search”。
3、搜索文檔
要搜索一個文檔,你需要使用FT.SEARCH命令,并指定索引名和查詢表達(dá)式。你可以使用多種查詢語法,如精確匹配、模糊匹配、數(shù)值過濾、布爾運算等。例如,要搜索blog索引中包含"redis"或"search"的文檔,你可以運行:
展開全文
這個命令會返回一個結(jié)果集,包含匹配的文檔數(shù)量、文檔ID和字段值。你可以使用LIMIT選項來分頁查詢,或者使用RETURN選項來指定返回哪些字段。
4、更新文檔
要更新一個文檔,你需要使用FT.PARTIAL命令,并指定文檔ID和要更新的字段值。例如,要更新blog:1文檔的標(biāo)題和標(biāo)簽,你可以運行:
這個命令會更新blog:1文檔的title和tags字段的值,并重新索引這些字段。
5、刪除文檔
要刪除一個文檔,你需要使用FT.DEL命令,并指定文檔ID。例如,要刪除blog:1文檔,你可以運行:
這個命令會從索引和數(shù)據(jù)庫中刪除blog:1文檔,并返回刪除的數(shù)量。
三、C#操作Redis Search結(jié)構(gòu)
這里使用了NRediSearch和StackExchange.Redis兩個庫,實現(xiàn)在C#中使用Redis和RediSearch的功能。也可以把 NRediSearch換為NRedisStack庫, NRedisStack庫基于 StackExchange.Redis 構(gòu)建,旨在為 C# 生態(tài)系統(tǒng)提供對 Redis Stack 命令的原生支持。
以下demo中已添加詳細(xì)注釋,是基于本文中有關(guān)Redis Search使用樣例的C#實現(xiàn),大家可對比閱讀。
publicclassRediSearchDemoProgram{privatestaticvoidMain( string[] args ) {// 創(chuàng)建一個連接到本地Redis實例的連接器ConnectionMultiplexer redis = ConnectionMultiplexer.Connect( "localhost"); // 獲取一個數(shù)據(jù)庫對象IDatabase db = redis.GetDatabase;
// 創(chuàng)建一個名為blog的索引,用于存儲博客文章的標(biāo)題、內(nèi)容和標(biāo)簽varclient = newClient( "blog", db); // 創(chuàng)建一個客戶端對象client.CreateIndex( newSchema // 創(chuàng)建一個索引對象.AddTextField( "title", 5.0) // 文本類型,權(quán)重為5.0.AddTextField( "content", 1.0) // 文本類型,權(quán)重為1.0.AddTagField( "tags", ","), newClient.ConfiguredIndexOptions); // 標(biāo)簽類型,分隔符為逗號
// 添加一篇博客文章到blog索引中client.AddDocument(// 添加一個文檔對象newDocument( "blog:1", newDictionary string, RedisValue { { "title", "Hello Redis Search"}, //設(shè)置標(biāo)題字段{ "content", "This is a blog post about Redis Search, a query and full-text search engine for Redis."}, // 設(shè)置內(nèi)容字段{ "tags", "redis,search"}, // 設(shè)置標(biāo)簽字段}));
// 搜索blog索引中包含"redis"或"search"的文檔varresult = client.Search( newQuery( "redis|search")); // 創(chuàng)建一個查詢對象Console.WriteLine(result.TotalResults); // 打印匹配的文檔數(shù)量foreach( vardoc inresult.Documents) {Console.WriteLine(doc.Id); // 打印文檔IDConsole.WriteLine(doc[ "title"]); // 打印標(biāo)題字段Console.WriteLine(doc[ "content"]); // 打印內(nèi)容字段Console.WriteLine(doc[ "tags"]); // 打印標(biāo)簽字段}
// 更新blog:1文檔的標(biāo)題和標(biāo)簽client.UpdateDocument( "blog:1", newDictionary string, RedisValue { { "title", "Hello RediSearch"}, //更新標(biāo)題字段{ "tags", "redis,search,full-text"}, // 更新標(biāo)簽字段});
// 刪除blog:1文檔client.DeleteDocument( "blog:1"); }}
本文就到這里了,下一篇我們來探索如何通過Redis Search進(jìn)行基于向量的搜索,實現(xiàn)文本相似度查詢。相比之下,這種搜索方式可以保留文本中的語義、語法和情感信息。
??感謝閱讀,點贊+分享+收藏+關(guān)注??
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請注明出處。