Lucene: незарегистрированные поля - PullRequest
3 голосов
/ 22 августа 2009

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

Ответы [ 2 ]

1 голос
/ 23 августа 2009

Вы можете использовать Люк для простого просмотра индекса. РЕДАКТИРОВАТЬ: Я думаю, что я понимаю проблему сейчас. Здесь - предлагаемое решение Анджея Бялецкого, которое гласит: создать индекс, содержащий документы только с новыми / измененными полями Каждый документ в исходном индексе будет иметь сопряженный документ с вычисляемыми полями. Используйте ParallelReader для поиска пар документов, имеющих исходные и рассчитанные поля.

0 голосов
/ 22 августа 2009

Не сохраненные поля - это просто не сохраненные. Их содержимое не может быть получено из индекса.

Чтобы сделать то, что вы сказали, у вас есть несколько вариантов:

  • сделать каждое поле сохраненным, чтобы вы могли создать новый документ из существующего
  • если ваше незарегистрированное поле большое (т. Е. Содержимое текстового файла), сохраните указатель на исходное содержимое в индексе (т. Е. Его путь к файлу). При создании нового документа прочитайте этот указатель из существующего документа, извлеките содержимое поля из исходного источника (т. Е. Из текстового файла), а затем добавьте его в новый документ без сохранения
  • если вы не изменяете несохраненное поле, вы можете извлечь существующий документ, обновить его другие поля и затем вернуть его в индекс. Это может быть возможно только в более поздних версиях Lucene (v2.2 и выше). РЕДАКТИРОВАТЬ : попробовав эту опцию, она не работает - см. Мой комментарий ниже.

В конечном счете, если вам нужно получить значение не сохраненного поля, вам нужно будет сохранить его.

...