2011-01-28 1 views
0

Возможно ли это? Я не могу напрямую обращаться к базе данных - только через объекты данных. Могу ли я искать индекс, если элементы возвращаются в нечто вроде ArrayList?Хранение индекса lucene в базе данных с использованием данных в java

Если это невозможно, можно ли каким-либо образом использовать Lucene (или какой-либо другой инструмент), чтобы выполнить нечеткое сопоставление с объектом с помощью java?

Например, у меня есть объект Person с именем FirstName и LastName. Я хочу сделать нечеткое совпадение имени. Итак, скажем, у меня есть массив из количества объектов Person, будет ли эффективный способ прокрутки каждого объекта Person и сравнения имен?

ответ

0

Возьмите эти объекты данных и создайте для них отдельный индекс Lucene, сохранив нужные вам поля. Используя ваш пример Person, каждый документ Lucene будет [Id, FirstName, LastName]. Поиск по этому индексу вернет идентификатор, необходимый для запроса вашей базы данных для всего объекта данных.

Фактическая индексация проста, вам просто нужно получить список объектов данных, перебрать их, сгенерировать документы Lucene и сохранить их с помощью IndexWriter. Вы можете работать с каталогом файловой системы для постоянного хранения или хранилищем в памяти.

0

Это возможные решения, которые я придумал - Однако я не могу сохранить свой индекс в FSDirectory (спецификации проекта не позволяют этого), а для RAMDirectory - тысячи объектов Person, которые нам понадобятся для поиска, поэтому я не знаю, идеально ли подходит память в памяти для этой ситуации.

Есть ли какой-либо другой алгоритм нечеткого совпадения, который я могу использовать, который будет эффективен для больших наборов данных?

+0

Я считаю, что это комментарий к ответу. Несколько тысяч документов не представляют никаких проблем для Lucene, а десять тысяч документов по 1 kb каждый по-прежнему составляют всего 10 мб памяти. Я не знаю, какой алгоритм fzzu вы планируете использовать, но вы можете заглянуть в структуру BKTree, которая может использоваться с расстоянием Levensthein, чтобы позволить нечеткие совпадения. – sisve

Смежные вопросы