Я нашел несколько вопросов в SO и других местах, которые задают вопросы в духе «Как я могу индексировать, а затем искать реляционные данные в Lucene». Совершенно справедливо, что эти вопросы встречаются со стандартным ответом, что Lucene не предназначен для моделирования таких данных. Эта цитата, которую я нашел, подводит итог ...
Индекс Lucene - это хранилище документов. В хранилище документов один
документ представляет собой единую концепцию со всеми необходимыми данными, хранящимися в
представляют эту концепцию (по сравнению с той же концепцией, распространяемой
по нескольким таблицам в RDBMS, требующей нескольких соединений для
воссоздавать).
Поэтому я не буду задавать этот вопрос, а вместо этого предоставлю свои требования высокого уровня и посмотрю, могут ли мне помочь какие-нибудь гуру Люсена.
- У нас есть данные о людях (имя, пол, DOB, национальность и т. Д.)
- И данные о компаниях (название, страна, город и т. Д.).
- У нас также есть данные о том, как эти два типа сущностей связаны друг с другом, когда человек работал в компании (человек, компания, роль, дата начала, дата окончания и т. Д.).
У нас есть две сущности - Персона и Компания, которые имеют свои собственные свойства, а затем существуют свойства для связи «многие ко многим» между ними.
Некоторые примеры поиска могут выглядеть следующим образом ...
- Найти все компании в Австралии
- Найти всех Люди, рожденные между двумя датами
- Найти всех людей, которые работали в качестве разработчика .Net
- Найдите всех мужчин, которые работали в качестве разработчика .Net в Лондоне.
- Найти всех людей, которые работали в качестве разработчика .Net в период с 2008 по 2010 гг.
Критерии охватывают все три набора данных. Наше требование - предоставить Фасетный поиск по данным, которые принимают любую комбинацию различных свойств, примеры которых я привел.
Я бы хотел использовать Lucene.Net для этого. Мы являемся разработчиком программного обеспечения .Net и поэтому чувствуем себя немного запуганными Java. Тем не менее, все предложения приветствуются.
Мне известна идея о том, что индекс следует составлять с учетом результатов поиска. Но я не могу придумать разумного индекса, который бы соответствовал всем комбинациям критериев поиска
- Какие классы являются родными для Lucene или какие точки расширения мы можем использовать.
- Существуют ли устоявшиеся техники для подобных вещей?
- Есть ли какие-то третьи материалы с открытым исходным кодом, которые я пропустил, которые помогут нам здесь?
Пока я не буду описывать сценарии, которые мы рассмотрели, потому что я не хочу задавать этот вопрос и делать его слишком пугающим. Пожалуйста, попросите меня уточнить, где это необходимо.