«усиление» разных экземпляров одного и того же поля в документе lucene - PullRequest
0 голосов
/ 13 октября 2010

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

Идея заключалась в том, чтобы сделать что-то вроде этого:

Field title = new Field("text", "alpha bravo charlie", Field.Store.NO, Field.Index.ANALYZED);
title.setBoost(3)
Field body = new Field("text", "delta echo foxtrot", Field.Store.NO, Field.Index.ANALYZED);
Document doc = new Document();
doc.add(title);
doc.add(body);

И тогда я мог бы просто сделать один TermQuery вместо BooleanQuery для двух отдельных полей.

Однако, оказывается, что усиление поля является кратным всего усиления полей с одинаковым именем в документе.В моем случае это означает, что оба поля имеют увеличение 3.

Есть ли способ получить то, что я хочу, не прибегая к использованию двух разных полей?Одним из способов является добавление поля title к документу несколько раз, что увеличивает частоту использования термина.Это работает, но кажется невероятно мёртвым.

Я также знаю о полезных нагрузках , но это похоже на излишество того, чего я добиваюсь.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 15 октября 2010

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

Хотя технически поиск по нескольким полям занимает больше времени, обычно даже с такими издержками, Lucene имеет тенденцию быть чрезвычайно быстрым (порядканесколько десятков или сотен миллисекунд.)

0 голосов
/ 13 октября 2010

Если вы хотите вынуть страницу из книги Google (по крайней мере, из их старой книги), то вы можете создать отдельные индексы: один для тела документа, другой для заголовков. Я предполагаю, что есть сохраненное поле, которое указывает на истинный UID для каждого фактического документа.

Альтернативный ответ - написать пользовательские реализации [Similarity] [1], чтобы получить желаемое поведение. К сожалению, я считаю, что Lucene часто нуждается в этой настройке, возникают уникальные проблемы.

[1]: http://lucene.apache.org/java/3_0_2/api/all/org/apache/lucene/search/Similarity.html#lengthNorm(java.lang.String, int)

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