Дает ли отключение норм для одного поля преимущество перед другими полями при поиске по нескольким полям?

У меня есть несколько полей, которые либо содержат только один термин, либо я не хочу, чтобы они были лишены преимуществ, если они содержат большее количество терминов, и я никогда не увеличиваю поле, поэтому отключаю нормы для этих полей с помощью Field.Index. .ANALYZED_NO_NORM или Field.Index.NOT_ANALYZED_NO_NORM.

Но теперь, если я ищу, используя два поля

i.e

fielda:term1 OR fieldb:term2

и для поля a включены нормы, а для поля b нет, не означает ли это, что документы, соответствующие полю b, с большей вероятностью получат более высокие оценки, чем документы, соответствующие полю a, потому что оценка для документа, соответствующего только полю a, в конечном итоге будет иметь более низкую оценку в

weight = tf * idf * fieldnorm calculation.

потому что fieldnorm будет меньше единицы, если это поле содержит более одного термина

Это не то, что я хотел, я просто хотел, чтобы документ совпадал с полем b, который содержал бы три термина для оценки, а также совпадал с полем документа b с одним термином.

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


person Paul Taylor    schedule 07.03.2012    source источник


Ответы (1)


Моя рекомендация заключалась бы в том, чтобы не смешивать запросы к полям, нормы которых отключены, с запросами к стандартным полям. Смысл отключения норм заключается в экономии места, когда запрос используется только как фильтр (и не влияет на оценку).

Элегантным способом сделать то, что вы хотите, было бы иметь два разных сходства для ваших полей. Однако эта функция (сходство для каждого поля) доступна только в разрабатываемой версии. В настоящее время.

person jpountz    schedule 07.03.2012
comment
Привет, да, я знаю, что модель подобия была широко открыта в Lucene 4.0, но, к сожалению, я не могу ее использовать. Я не уверен, что нормы ТОЛЬКО отключены для фильтров в моем случае. Я отключил их для защиты от сценария «один-многие», когда несколько значений добавляются в одно поле и их нельзя справедливо сравнивать с одним и тем же полем, когда оно имеет только одно значение. Но вы не ответили, верно ли мое утверждение, что поле без норм имеет неявный буст по сравнению с полем с нормами. - person Paul Taylor; 08.03.2012
comment
Это верно. Глядя на определение calculateNorm в DefaultSimilarity svn.apache.org/repos/asf/lucene/dev/branches/branch_3x/lucene/ коэффициент нормализации будет равен 1 для полей с отключенными нормами и 1/ sqrt(numTerms) для стандартных полей. Вы можете переопределить вычислениеNorm, чтобы умножить его результат на sqrt(3), чтобы поля с 3 терминами имели ту же норму, что и поля с отключенными нормами (но это своего рода хак). Обратите внимание, что если вы измените определение calculateNorm, вам потребуется переиндексировать, чтобы сделать изменения видимыми. - person jpountz; 08.03.2012
comment
Хорошо, да, не отключающие нормы действуют так, как если бы поле содержало только один термин, поэтому на самом деле любое поле, содержащее только одиночные значения, также будет иметь преимущество по сравнению с другими полями, хотя это может быть уравновешено тем фактом, что idf, вероятно, будет работать наоборот, потому что если поле содержит только одно значение, оно может быть более распространенным по сравнению с индексом. Теперь, даже если бы у меня было сходство по полю, я не совсем уверен, какой подход я бы выбрал. - person Paul Taylor; 08.03.2012