#indexing #lucene #clob
#индексирование #lucene #скопление
Вопрос:
Привет, мы ищем механизм поиска в нашем приложении, который содержит множество реляционных таблиц, содержащих содержимое CLOB. У нас есть требования, позволяющие нашим пользователям выполнять поиск по этой информации. Мы изучаем Oracle Text, но пока не нашли никаких хороших новостей об этом продукте.
Мы думаем о чтении скопления в каком-либо процессе, извлекающем данные и индексирующем эти данные. Наши пользователи выполняли бы поиск, а мы сопоставляли бы индекс с идентификатором строки в наших таблицах и представляли результаты нашим пользователям.
Хорошая ли это задача для Lucene, или я не думаю должным образом?
Ответ №1:
Вы должны иметь возможность добавлять текст в своем CLOB в одно поле, а идентификатор строки — в другое поле. Если скопление уже сохранено в вашей базе данных, не сохраняйте его снова в индексе Lucene (используйте Store.NO
при добавлении текстового поля). Сохраните идентификатор строки. Когда документ совпадает, вы можете извлечь поле идентификатора строки из результатов и использовать его для ссылки на свою таблицу.
String rowid = ...; // row id from DB
String text = ...; // data from CLOB;
Document doc = new Document();
doc.add(new Field(FIELD_ID, rowid, Store.YES, Index.NOT_ANALYZED));
doc.add(new Field(FIELD_BODY, text, Store.NO, Index.ANALYZED, TermVector.YES));