Как лучше всего индексировать и искать мои данные с помощью Lucene? - PullRequest
1 голос
/ 13 декабря 2011

Я нашел несколько вопросов в SO и других местах, которые задают вопросы в духе «Как я могу индексировать, а затем искать реляционные данные в Lucene». Совершенно справедливо, что эти вопросы встречаются со стандартным ответом, что Lucene не предназначен для моделирования таких данных. Эта цитата, которую я нашел, подводит итог ...

Индекс Lucene - это хранилище документов. В хранилище документов один документ представляет собой единую концепцию со всеми необходимыми данными, хранящимися в представляют эту концепцию (по сравнению с той же концепцией, распространяемой по нескольким таблицам в RDBMS, требующей нескольких соединений для воссоздавать).

Поэтому я не буду задавать этот вопрос, а вместо этого предоставлю свои требования высокого уровня и посмотрю, могут ли мне помочь какие-нибудь гуру Люсена.

  • У нас есть данные о людях (имя, пол, DOB, национальность и т. Д.)
  • И данные о компаниях (название, страна, город и т. Д.).
  • У нас также есть данные о том, как эти два типа сущностей связаны друг с другом, когда человек работал в компании (человек, компания, роль, дата начала, дата окончания и т. Д.).

У нас есть две сущности - Персона и Компания, которые имеют свои собственные свойства, а затем существуют свойства для связи «многие ко многим» между ними.

Некоторые примеры поиска могут выглядеть следующим образом ...

  • Найти все компании в Австралии
  • Найти всех Люди, рожденные между двумя датами
  • Найти всех людей, которые работали в качестве разработчика .Net
  • Найдите всех мужчин, которые работали в качестве разработчика .Net в Лондоне.
  • Найти всех людей, которые работали в качестве разработчика .Net в период с 2008 по 2010 гг.

Критерии охватывают все три набора данных. Наше требование - предоставить Фасетный поиск по данным, которые принимают любую комбинацию различных свойств, примеры которых я привел.

Я бы хотел использовать Lucene.Net для этого. Мы являемся разработчиком программного обеспечения .Net и поэтому чувствуем себя немного запуганными Java. Тем не менее, все предложения приветствуются.

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

  • Какие классы являются родными для Lucene или какие точки расширения мы можем использовать.
  • Существуют ли устоявшиеся техники для подобных вещей?
  • Есть ли какие-то третьи материалы с открытым исходным кодом, которые я пропустил, которые помогут нам здесь?

Пока я не буду описывать сценарии, которые мы рассмотрели, потому что я не хочу задавать этот вопрос и делать его слишком пугающим. Пожалуйста, попросите меня уточнить, где это необходимо.

1 Ответ

2 голосов
/ 13 декабря 2011

Чтобы хранить как компании, так и людей в одном индексе, вы можете создать документы с полем type, в котором указан тип сущностей, которые они описывают.

Дни рождения можно сохранить как поля даты.

Вы могли бы дать каждому человеку простое текстовое поле, содержащее названия компаний, в которых они работали.Обратите внимание, что вы не получите ошибку, если введете компанию, которая не представлена ​​документом в вашем индексе.Lucene не является инструментом реляционной БД, но вы это знали.

(Извините, что я не разместил никаких ссылок на API; я знаком с Lucene Core, но не с Lucene.NET.)

...