欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#+RedisSearch實現(xiàn)高性能全文搜索

 更新時間:2023年07月30日 09:56:52   作者:猿惑豁  
Redis?Search是一個Redis模塊,它使用壓縮的倒排索引來實現(xiàn)快速的索引和低內(nèi)存占用,本文主要介紹了C#如何使用RedisSearch實現(xiàn)高性能全文搜索,希望對大家有所幫助

Redis Search是一個Redis模塊,它使用壓縮的倒排索引來實現(xiàn)快速的索引和低內(nèi)存占用。Redis Search可以對Redis數(shù)據(jù)進行精確短語匹配、模糊搜索、數(shù)值過濾、地理空間篩選等多種搜索功能。Redis Search還支持聚合、高亮、詞干提取、拼寫糾錯等特性。

Redis Search文檔地址

https://redis.io/docs/interact/search-and-query/

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支持多種擴展模塊,如RedisJSON(用于處理JSON文檔),RedisGraph(用于處理圖數(shù)據(jù)),RedisTimeSeries(用于處理時間序列數(shù)據(jù)),RediSearch(用于處理全文搜索)等。elasticsearch則需要依賴插件來擴展其功能。

一、Redis Search的安裝

有多種方式可以安裝和使用Redis Search,最簡單的方式是使用Redis Stack Docker鏡像,它已經(jīng)集成了Redis和多個模塊,包括Redis Search。只需運行一條命令,就可以在本地創(chuàng)建一個RediSearch容器:

$ docker run -p 6379:6379 redis/redis-stack-server:latest

要連接到這個實例,運行:

$ redis-cli

二、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)簽,你可以運行:

127.0.0.1:6379> FT.CREATE blog ON HASH PREFIX 1 blog: SCHEMA title TEXT WEIGHT 5.0 content TEXT WEIGHT 1.0 tags TAG SEPARATOR ","
OK

這個命令會創(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索引中,你可以運行:

127.0.0.1:6379> FT.ADD blog blog:1 1.0 FIELDS 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"
OK

這個命令會添加一個ID為blog:1的文檔到blog索引中,并給它一個分?jǐn)?shù)為1.0(默認為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命令,并指定索引名和查詢表達式。你可以使用多種查詢語法,如精確匹配、模糊匹配、數(shù)值過濾、布爾運算等。例如,要搜索blog索引中包含"redis"或"search"的文檔,你可以運行:

127.0.0.1:6379> FT.SEARCH blog "redis|search"
1) (integer) 1
2) "blog:1"
3) 1) "title"
   2) "Hello Redis Search"
   3) "content"
   4) "This is a blog post about Redis Search, a query and full-text search engine for Redis."
   5) "tags"
   6) "redis,search"

這個命令會返回一個結(jié)果集,包含匹配的文檔數(shù)量、文檔ID和字段值。你可以使用LIMIT選項來分頁查詢,或者使用RETURN選項來指定返回哪些字段。

4、更新文檔

要更新一個文檔,你需要使用FT.PARTIAL命令,并指定文檔ID和要更新的字段值。例如,要更新blog:1文檔的標(biāo)題和標(biāo)簽,你可以運行:

127.0.0.1:6379> FT.PARTIAL blog blog:1 REPLACE FIELDS title "Hello RediSearch" tags "redis,search,full-text"
OK

這個命令會更新blog:1文檔的title和tags字段的值,并重新索引這些字段。

5、刪除文檔

要刪除一個文檔,你需要使用FT.DEL命令,并指定文檔ID。例如,要刪除blog:1文檔,你可以運行:

127.0.0.1:6379> FT.DEL blog blog:1
(integer) 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 命令的原生支持。

項目地址:

NRedisStack:https://github.com/redis/NRedisStack

NRediSearch:https://github.com/StackExchange/NRediSearch

StackExchange.Redis:https://github.com/StackExchange/StackExchange.Redis

以下demo中已添加詳細注釋,是基于本文中有關(guān)Redis Search使用樣例的C#實現(xiàn),大家可對比閱讀。

// 引入NRediSearch和StackExchange.Redis命名空間
using NRediSearch;
using StackExchange.Redis;
public class RediSearchDemoProgram
{
    private static void Main(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)簽
        var client = new Client("blog", db); // 創(chuàng)建一個客戶端對象
        client.CreateIndex(new Schema() // 創(chuàng)建一個索引對象
            .AddTextField("title", 5.0) // 文本類型,權(quán)重為5.0
            .AddTextField("content", 1.0) // 文本類型,權(quán)重為1.0
            .AddTagField("tags", ","), new Client.ConfiguredIndexOptions()); // 標(biāo)簽類型,分隔符為逗號
        // 添加一篇博客文章到blog索引中
        client.AddDocument(
            // 添加一個文檔對象
            new Document("blog:1", new Dictionary<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"的文檔
        var result = client.Search(new Query("redis|search")); // 創(chuàng)建一個查詢對象
        Console.WriteLine(result.TotalResults); // 打印匹配的文檔數(shù)量
        foreach (var doc in result.Documents)
        {
            Console.WriteLine(doc.Id); // 打印文檔ID
            Console.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", new Dictionary<string, RedisValue> {
            { "title", "Hello RediSearch"},//更新標(biāo)題字段
            { "tags", "redis,search,full-text"}, // 更新標(biāo)簽字段
        });
        // 刪除blog:1文檔
        client.DeleteDocument("blog:1");
    }
}

到此這篇關(guān)于C#+RedisSearch實現(xiàn)高性能全文搜索的文章就介紹到這了,更多相關(guān)C# RedisSearch全文搜索內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VS2010下生成dll的方法

    VS2010下生成dll的方法

    這篇文章主要介紹了VS2010下生成dll的方法,需要的朋友可以參考下
    2018-01-01
  • C#純技術(shù)之Class寫入Json

    C#純技術(shù)之Class寫入Json

    這篇文章主要介紹了C#純技術(shù)之Class寫入Json問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Linq利用Distinct去除重復(fù)項問題(可自己指定)

    Linq利用Distinct去除重復(fù)項問題(可自己指定)

    這篇文章主要介紹了Linq利用Distinct去除重復(fù)項問題(可自己指定),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C#使用NAudio錄音并導(dǎo)出錄音數(shù)據(jù)

    C#使用NAudio錄音并導(dǎo)出錄音數(shù)據(jù)

    這篇文章主要為大家詳細介紹了C#如何使用NAudio實現(xiàn)錄音功能并導(dǎo)出錄音數(shù)據(jù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • C#仿QQ聊天窗口

    C#仿QQ聊天窗口

    這篇文章主要為大家詳細介紹了C#仿QQ聊天窗口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#比較兩個List集合內(nèi)容是否相同的幾種方法

    C#比較兩個List集合內(nèi)容是否相同的幾種方法

    本文詳細介紹了在C#中比較兩個List集合內(nèi)容是否相同的方法,包括非自定義類和自定義類的元素比較,對于非自定義類,可以使用SequenceEqual、排序后比較或HashSet來忽略重復(fù)元素,對于自定義類,需要重寫Equals和GetHashCode方法,然后使用相應(yīng)的比較方法
    2025-02-02
  • 在C#中如何使用Dapper詳解(譯)

    在C#中如何使用Dapper詳解(譯)

    這篇文章主要給大家介紹了關(guān)于在C#中如何使用Dapper的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起看看吧
    2018-09-09
  • 詳解c# 類型轉(zhuǎn)換

    詳解c# 類型轉(zhuǎn)換

    這篇文章主要介紹了c# 類型轉(zhuǎn)換的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以學(xué)習(xí)
    2020-07-07
  • C#中的問號(?號)用法小結(jié)

    C#中的問號(?號)用法小結(jié)

    這篇文章主要介紹了C#中的問號(?號)用法小結(jié),本文介紹了3種用法,分別作為修飾符、運算符的用法,需要的朋友可以參考下
    2014-07-07
  • C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的參數(shù)詳解

    C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的參數(shù)詳解

    在本篇文章中小編給大家分享的是一篇關(guān)于C#實現(xiàn)String字符串轉(zhuǎn)化為SQL語句中的In后接的實例內(nèi)容和代碼,需要的朋友們參考下。
    2020-01-01

最新評論