他の人が言ったように、私は Lucene.NET の使用を開始すると言います
Lucene の習得にはかなりの時間がかかりますが、「 SimpleLucene 」と呼ばれるラッパーをCodePlexで見つけました。
ブログからいくつかのコードブロックを引用して、使い方がいかに簡単かをお見せしましょう。まだ使い始めたばかりですが、すぐに慣れました。
まず、リポジトリからいくつかのエンティティを取得するか、場合によっては Entity Framework を使用します
public class Repository
{
public IList<Product> Products {
get {
return new List<Product> {
new Product { Id = 1, Name = "Football" },
new Product { Id = 2, Name = "Coffee Cup"},
new Product { Id = 3, Name = "Nike Trainers"},
new Product { Id = 4, Name = "Apple iPod Nano"},
new Product { Id = 5, Name = "Asus eeePC"},
};
}
}
}
次にやりたいことは、インデックス定義を作成することです
public class ProductIndexDefinition : IIndexDefinition<Product> {
public Document Convert(Product p) {
var document = new Document();
document.Add(new Field("id", p.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
document.Add(new Field("name", p.Name, Field.Store.YES, Field.Index.ANALYZED));
return document;
}
public Term GetIndex(Product p) {
return new Term("id", p.Id.ToString());
}
}
そのための検索インデックスを作成します。
var writer = new DirectoryIndexWriter(
new DirectoryInfo(@"c:\index"), true);
var service = new IndexService();
service.IndexEntities(writer, Repository().Products, ProductIndexDefinition());
これで、検索可能なインデックスが作成されました。あとは探すだけ…!かなり驚くべきことを行うことができますが、次のように簡単にすることもできます: (より大きな例については、ブログまたは codeplex のドキュメントを参照してください)。
var searcher = new DirectoryIndexSearcher(
new DirectoryInfo(@"c:\index"), true);
var query = new TermQuery(new Term("name", "Football"));
var searchService = new SearchService();
Func<Document, ProductSearchResult> converter = (doc) => {
return new ProductSearchResult {
Id = int.Parse(doc.GetValues("id")[0]),
Name = doc.GetValues("name")[0]
};
};
IList<Product> results = searchService.SearchIndex(searcher, query, converter);