Lucene создан, чтобы ответить на противоположный вопрос, то есть какие документы содержат данный термин. Таким образом, чтобы получить количество терминов для документа, вам нужно немного взломать.
Первый способ заключается в сохранении вектора терминов для каждого поля, которое необходимо для получения количества терминов. Вектор терминов - это список терминов полей. Во время поиска вы можете получить его, используя метод getTermFreqVector IndexReader (если они были сохранены во время индекса). Когда он у вас есть, вы получаете длину вектора и количество терминов для этого поля.
Другой способ, если вы сохранили поля своих документов, - это вернуть текст этих полей и посчитать количество терминов, проанализировав его (разбить текст на слова).
Наконец, если для вас достаточно приблизительного числа членов поля, и вы сохранили нормы в индексное время, есть возможность вычислить обратную функцию той, которая используется для вычисления норм поля. Если вы внимательно посмотрите на метод lengthNorm класса Similarity, вы заметите, что он использует количество членов поля. Результат этого метода сохраняется в индексе с использованием метода encodeNorm . Вы можете во время поиска извлечь нормы, используя метод IndexReader norms . Имея норму в руках, использует обратную математическую функцию той, которая используется в lengthNorm, чтобы получить количество членов. Как я уже сказал, это только приблизительное значение, потому что при сохранении нормы теряется некоторая точность, и вы можете не получить то же число, что и сохраненное.