Получить токены поля из индекса lucene - PullRequest
1 голос
/ 20 марта 2012

Как я могу получить токены (будь то список токенов, TokenStream или что-то еще), которые использовались для Field в Document из индекса люцена? То есть можно ли получить токены, которые использовались в tokens (из примера) из индекса? (Мне не интересно, как получить токены из TokenStream)

doc.add(new Field("title", tokens))

В документации есть Field.tokenStreamValue(), но когда я делаю doc.getFieldable(field_name), это просто возвращает null.

Я также пытался (из третьего комментария в lucene - Fieldable.tokenStreamValue () ):

TokenSources.getTokenStream(reader, doc_id, field_name)

но я получаю

java.lang.IllegalArgumentException: title in doc #630does not have any term position data stored
    at org.apache.lucene.search.highlight.TokenSources.getTokenStream(TokenSources.java:256)

1 Ответ

2 голосов
/ 20 марта 2012

Класс TokenSources является вспомогательным классом для извлечения токенов документа в целях выделения. Есть два способа получить термины для данного документа:

  • повторный анализ сохраненного поля,
  • чтение вектора условий документа.

Метод, который вы хотите использовать , пытается прочитать вектор терминов документа , но завершается неудачно, потому что вы не включили векторы терминов во время индексации.

Таким образом, вы можете включить векторы терминов во время индексации и продолжать использовать этот метод (см. Конструктор поля и документацию Field.TermVector ) или повторно проанализировать содержимое вашего сохраненные поля. Первый метод может обеспечить лучшую производительность, особенно для больших полей, тогда как второй сэкономит место (нет никакой дополнительной информации для хранения, если ваше поле уже сохранено).

...