Использование индекса Lucene в качестве входных данных для Hadoop - PullRequest
3 голосов
/ 17 июня 2011

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

1 Ответ

1 голос
/ 19 июня 2011

Что вам нужно сделать, это использовать IndexReader.terms() для перечисления терминов, IndexReader.docFreq(Term t) для получения количества документов, содержащих термин (для IDF), и IndexReader.termDocs(Term t) для получения значения DF для каждого термина, пары документов , Используя эту информацию, вы сможете передавать данные в Mapper, который затем будет выполнять их подсчет. Обратите внимание, что вызов termDocs представляет документ по его внутреннему целочисленному номеру, поэтому вы не сможете изменить индекс при выполнении этого вычисления, поскольку вы не сможете отобразить номера документов обратно в документы после изменения индекса. Чтобы обойти это, либо не изменяйте индекс до тех пор, пока не будут обработаны результаты шага сокращения, либо, получив номер документа, преобразуйте его во внешний идентификатор, прочитав соответствующее поле из документа и передав его в Картограф.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...