В основном у меня есть довольно простая база данных, которую я хотел бы проиндексировать с помощью Lucene.
Домены:
// Person domain
class Person {
Set<Pair> keys;
}
// Pair domain
class Pair {
KeyItem keyItem;
String value;
}
// KeyItem domain, name is unique field within the DB (!!)
class KeyItem{
String name;
}
У меня десятки миллионов профилей и сотни миллионов пар, однако, поскольку большинство полей "name" в KeyItem дублируются, существует всего несколько десятков экземпляров KeyItem.
Пришел к этой структуре, чтобы сохранить на экземплярах KeyItem.
В принципе любой профиль с любыми полями может быть сохранен в этой структуре.
Допустим, у нас есть профиль со свойствами
- name: Andrew Morton
- eduction: University of New South Wales,
- country: Australia,
- occupation: Linux programmer.
Для его хранения у нас будет один экземпляр Profile, 4 экземпляра KeyItem: имя, образование, страна и род занятий, и 4 экземпляра Pair со значениями: «Эндрю Мортон», «Университет Нового Южного Уэльса», «Австралия» и "Linux Programmer".
Все остальные профили будут ссылаться (все или некоторые) на одни и те же экземпляры KeyItem: имя, образование, страна и род деятельности.
Мой вопрос заключается в том, как проиндексировать все это, чтобы я мог искать в Профиле некоторые конкретные значения KeyItem :: name и Pair :: value. В идеале я бы хотел, чтобы такой запрос работал:
имя: Андрей * И род занятий: Linux *
Должен ли я создать собственный индексатор и поисковик? Или я мог бы использовать стандартные и просто сопоставить KeyItem и Pair как компоненты Lucene?