Lucene для реляционного отображения для .NET - PullRequest
1 голос
/ 20 марта 2012

Есть ли для .NET среда Lucene (Lucene.NET) для реляционной базы данных, рекомендуемая для .NET?

Я хотел использовать Lucene для целей поиска, чтобы выгрузить весь поиск из моей реляционной базы данных.

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Вы также можете проверить Lucene2Objects , размещенный в Nuget , и образец вводной статьи в моем блоге . По сути, вы можете абстрагироваться от Lucene и думать об объектах, вы даже можете комментировать свои доменные сущности, например:

[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; }
}

А затем сохраните как это:

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);
}

Извините, если ответ слишком длинный. Надеюсь, я смогу помочь!

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Как вы могли себе представить, я написал библиотеку.

0 голосов
/ 22 марта 2012

Существует несколько проектов с открытым исходным кодом, таких как SimpleLucene , но я не использовал ни одного из них.

Как вы сказали, вы можете думать о lucene как о единой таблице БД (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

...