.NET 6全文檢索引擎Lucene.NET 4.8簡單封裝
前言
因為最近在做一個檢索數據的工具。最開始用的Mysql8自帶的全文檢索功能。但是發現這貨數據量超過百萬之後,檢索速度直線下降。
於是想到Lucene.net。花了一晚上時間做了簡單的封裝。可以直接用於博客網站站內搜索等簡單使用場景。
目前做了幾個簡單的封裝
- 創建索引
- jiba.net分詞檢索
- 檢索分頁
- 按字段檢索
- 字段排序
- 索引刪除
如何使用?
已經封裝成了nuget包,並上傳到nuget上,可以直接安裝 dotnet add package EasyLuceneNET
也可以直接在vs裏面搜索
創建模型
public class Article
{
[Lucene(FieldStore = Field.Store.YES, IsUnique = true, type = LuceneFieldType.Int32)]
public int Id { get; set; }
[Lucene(FieldStore = Field.Store.YES, IsUnique = false, type = LuceneFieldType.Text)]
public string Title { get; set; }
[Lucene(FieldStore = Field.Store.YES, IsUnique = false, type = LuceneFieldType.Text)]
public string Content { get; set; }
}
依賴注入
var service = new ServiceCollection();
service.AddLogging();
service.AddEasyLuceneNet();
var serviceProvider = service.BuildServiceProvider();
var easy = serviceProvider.GetService<IEasyLuceneNet>();
創建索引
var list = new List<Article>();
for (int i = 0; i < 100; i++)
{
list.Add(new Article()
{
Id = i,
Title = i + "使用Xamarin開發移動應用示例——數獨遊戲(八)使用MVVM實現完成遊戲列表頁面",
Content = @"前面我們已經完成了遊戲的大部分功能,玩家可以玩預製的數獨遊戲,也可以自己添加新的遊戲。現在我們實現展示已完成遊戲列表頁面,顯示用戶已經完成的遊戲列表,從這個列表可以進入詳細的復盤頁面。
前面的頁面我們採用的是傳統的事件驅動模型,在XAML文件中定義頁面,在後台的cs文件中編寫事件響應代碼。採用這種模型是因為很多頁面需要動態生成控件,然後動態改變這些控件的屬性,事件驅動模型在這種場景下比較好理解。現在我們採用MVVM方式編寫完成遊戲列表頁面。
MVVM是將頁面綁定到視圖模型,所有的操作和事件響應通過視圖模型完成。視圖模型中沒有頁面控件的定義,因此和頁面是解耦的,可以獨立進行測試。在視圖模型中我們只關心數據,而不關心展示數據的控件。
首先,我們定義一個視圖模型的基類,下一步在改造其它頁面時,會用到這個基類:"
});
}
easy!.AddIndex(list);
檢索數據
var result = easy!.Search<Article>(new SearchRequest()
{
keyword = "事件模型",
index = 1,
size = 20,
fields = new string[] { "Title", "Content" },
OrderByField = "Id",
});
Console.WriteLine("一共:" + result.Total);
foreach (var item in result.list)
{
Console.WriteLine($"id:{item.Id} title:{item.Title}");
}
Console.WriteLine($"分詞:{string.Join(" ", result.cutKeys)}");
Console.WriteLine("完成");
刪除索引
傳遞一個文檔對應的模型,只需要給主鍵賦值即可
easy.Delete(new Article { Id = 1 });
基本的檢索就差不多到這裡結束了,如果需要自己更新詞庫,可以下載源碼自己編譯,或者我後面有時間把詞庫單獨弄出來
源碼
關注我
歡迎大家關注我的公眾號【網上衝浪程序員】,不定時和你分享