首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

.NET MVC 搜索功能實現:Lucene.NET / Elasticsearch / 全文檢索方案

     編輯:程式設計綜合問答

方案對比

方案特點適用場景學習成本
Lucene.NET嵌入式、無獨立進程、API 豐富中小型應用、單機部署中
Elasticsearch分布式、RESTful、近實時、生態強大規模、高併發、多語言較高
SQL Server Full-Text Search內建、無額外組件、T-SQL 集成簡單全文檢索、已用 SQL Server低
PostgreSQL pg_trgm / tsvector內建、支持模糊/正則PostgreSQL 用戶低
MeiliSearch / Typesense輕量、開箱即用、類 Algolia中小型、追求開發體驗低

快速上手:Lucene.NET 4.8 (NuGet)

// 1. 索引寫入
var dir = FSDirectory.Open(new DirectoryInfo("LuceneIndex"));
var analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
var config = new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer);
using (var writer = new IndexWriter(dir, config)) {
    var doc = new Document();
    doc.Add(new TextField("id", "1", Field.Store.YES));
    doc.Add(new TextField("title", "C# 高級編程", Field.Store.YES));
    doc.Add(new TextField("content", "第1章 介紹...", Field.Store.NO));
    writer.AddDocument(doc);
    writer.Commit();
}

// 2. 搜索
using (var reader = DirectoryReader.Open(dir))
using (var searcher = new IndexSearcher(reader)) {
    var parser = new MultiFieldQueryParser(LuceneVersion.LUCENE_48, 
        new[] { "title", "content" }, analyzer);
    var query = parser.Parse("C# 編程");
    var hits = searcher.Search(query, 10).ScoreDocs;
    foreach (var hit in hits) {
        var doc = searcher.Doc(hit.Doc);
        Console.WriteLine($"{doc.Get("id")} {doc.Get("title")} Score:{hit.Score}");
    }
}

資源鏈接

選型建議

  1. **新項目、預期數據增長快** → 直接上 Elasticsearch (Docker 一鍵啟動)。
  2. **現有 SQL Server、檢索需求簡單** → 開啟 Full-Text Search,最省事。
  3. **單機、不想維護中間件** → Lucene.NET 或 MeiliSearch。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved