.NETに推奨されているLucene(Lucene.NET)からリレーショナルデータベースへのマッピングフレームワークはありますか?Luceneから.NETへのリレーショナルマッピング
私は、リレーショナルデータベースからすべての検索をオフロードする検索目的でLuceneを使いたいと思っていました。
.NETに推奨されているLucene(Lucene.NET)からリレーショナルデータベースへのマッピングフレームワークはありますか?Luceneから.NETへのリレーショナルマッピング
私は、リレーショナルデータベースからすべての検索をオフロードする検索目的でLuceneを使いたいと思っていました。
SimpleLuceneのようなオープンソースプロジェクトがいくつかありますが、いずれも使用していません。
luceneは単一のDBテーブル(i thought of, in lucene we have document that we can theoretically treat it as a single relational table
)と考えることができます。だから私はあなたが単一のテーブルのための複雑なrelational database mapping framework
を必要とするとは思わない。以下のような拡張メソッドを使用すると、Lucene.Netで遊ぶことができます。例えば
public static class LuceneExtension
{
public static void Index(this IndexWriter writer, object obj)
{
Document doc = new Document();
obj.GetType()
.GetProperties()
.Select(p => new { Name = p.Name, Value = p.GetValue(obj, null) })
.ToList()
.ForEach(f=>doc.Add(new Field(f.Name,f.Value.ToString(),Field.Store.YES,Field.Index.ANALYZED)));
writer.AddDocument(doc);
}
}
indexWriter.Index(new { text = "some text to index" , id = "555" });
は、インデックスフィールドtext
とid
との文書はまた、my blogにLucene2Objects hosted in Nugetと試料導入物品とを確認することができます。
[SearchableEntity(DefaultSearchProperty = "Text")]
public class Message
{
public int Id { get; set; }
[Indexed]
public string Text { get; set; }
[Indexed]
public string Title { get; set; }
public DateTime Sent { get; set; }
public DateTime? Read { get; set; }
}
をそして、このように保存します:基本的にはあなたがLuceneの抽象することができますし、オブジェクトの上だと思う、あなたもこのように、あなたのドメインエンティティに注釈を付けることができ
var iWriter = new IndexWriter(Environment.CurrentDirectory + @"\index");
var message = new Message { Id = 12, Sent = DateTime.Now,
Text = "Some text on the message!",
Title = "This is the title"
};
iWriter.AddEntity(message);
iWriter.Close();
そして、このようなあなたのインデックスを検索します
var iReader = new IndexReader(Environment.CurrentDirectory + @"\index");
var messages = iReader.Search<Message>("text");
foreach (var message in messages) {
Console.WriteLine("Message: {0}", message.Title);
}
答えが長すぎる場合は申し訳ありません。 私は助けることができますように!
免責事項:あなたが想像していたように、私はライブラリを書きました。
こんにちはDavid、これは基本的に私が探していたものでした。また、検索可能なEntityクラスに「テーブル名」を追加した同様のライブラリを作成しました。私は車輪を再発明するかもしれないと思っているだけで、テストされた、準備が整った図書館があれば、あまりにも多くの時間を費やしたくないと思って、このトレッドを上げました。しかし、私たちは同じページにいると思います。:) – addisu
MongoDBやNoSQLの代替案を使用する予定がある場合、テーブルのコンセプトにデザインを縛っている点を除いて、ちょっといいです。いくつかのポイント.. –
luceneをリレーショナルデータにマップしたいですか?リレーショナル設計は重複排除に基づいていることは知っていますが、データ重複に基づいてルーゼンインデックスが+/-ですか?さらに、luceneに同じ名前の複数のフィールドが存在する可能性があります。 – Reactormonk
私は理論的には単一のリレーショナルテーブルとして扱うことができるという文書をluceneに持っています。 – addisu
luceneにスキーマはありません。 – Reactormonk