2012-03-12 3 views
-2

, хотя это второй раз, я отправляю тот же вопрос, the first one is here, но ответа нет или частичный ответ. Я боролся с этой проблемой и потерял в lucene api ...lucene 4.0 статистика

Что мне интересно, чтобы получить длину документа от Lucene. Когда я использую searcher.explain (используя bm25), я вижу, что эта функция существует, но мне нужно только ее получить.

Я был бы очень признателен за пример, поскольку я новичок в Lucene, просто точка API не поможет.

Один из наивных способов сделать это - сохранить эту длину в отдельном поле, используя string.length() из java, и при запросе времени его получить, однако, эта фальшивка уже существует (иначе bm25 не будет работать) Не хотите что-то хранить в избытке.

Я был бы очень признателен, если бы вы дали более подробное объяснение того, как достичь этого с помощью lucene 4.0, и если вы не можете предоставить и ответить, пожалуйста, не отвечайте только ради ответа (как тогда другие не читают мой пост, думая, что он решен !!!!), и не посылайте мне указатель на api (например, см. Similarity.computeNorm от Роберта Муира), потому что это не поможет мне. Мне нужно больше деталей, например, как использовать этот FieldInvertState или Similarity.computeNorm ??? Время запроса или время индекса ??? небольшой фрагмент кода будет полезным, вы должны учитывать, что я не эксперт здесь, в противном случае я бы не просил

заранее спасибо

+4

Пожалуйста, не дублируйте вопросы только потому, что вам не нравится чтение документации. Я указал вам на соответствующую документацию о том, как работать с этими статистическими данными, чтобы вы могли двигаться дальше с вашим приложением. Факт: lucene не сохраняет длину документа (или любую другую статистику по каждому документу), если вы не делаете этого в своем сходстве самостоятельно. Я знаю это, потому что для Lucene 4.0 я написал API, о котором идет речь. –

+0

вы не указали детали, теперь я знаю, что я должен делать это во время индекса (init, я думал во время запроса), но в API нет примера о том, как это сделать, в индексе я могу хранить только документы , а не объект подобия. Можете ли вы опубликовать фрагмент кода, как вставить эту метрику в индекс? –

+0

Я дал вам ссылку на Similarity.computeNorm, и есть множество систем оценки, которые используют длину документа в Lucene (вы можете посмотреть на их код). Ваш вопрос не дает достаточной информации: какая длина документа (это количество исходных терминов или количество анализируемых терминов после добавления таких синонимов)? какой уровень точности вам нужен; нормы полностью загружаются в память, поэтому сколько байтов/документов вы готовы потратить в ОЗУ для этой статистики? вам нужно также поддерживать повышение индекса времени? Это важные решения, которые влияют на производительность и релевантность. –

ответ

1

Да, новая версия Lucene вы смотрите, тем сложнее его сложность. Иногда это помогает читать документы в более ранней версии, чтобы более четко видеть основные принципы.

Теперь к вашему делу ... сходство - это объект типа стратегии, который вы назначаете всему процессу индексирования (IndexWriterConfig.setSimilarity). Его методы будут вызываться для вычисления различных фрагментов информации о каждом документе и каждом из его полей, добавляемых к индексу. Итак, что предлагает Роберт, нужно сделать свой подкласс подобия (взять рекомендации docs и не подклассы «Сходство» напрямую, а скорее одну из существующих реализаций, таких как DefaultSimilarity). Переопределите метод computeNorm для получения числа, которое вы хотите для поля переданного. По умолчанию Lucene уже вычисляет эту норму так, чтобы она тонировала длинные поля, поэтому, я думаю, у вас есть что-то более конкретное, чем у вас на уме.

Я бы тепло предложил удержать Lucene In Action, если вы хотите серьезно относиться к использованию Lucene.

Смежные вопросы