Резюме. Для Lucene > 6.x установите для параметра disableCoord значение true, в противном случае оставьте значение false.
Coord — это функция оценки BooleanQuery для противодействия некоторым недостаткам TF/IDF для перенасыщенных терминов. Это актуально только для нескольких предложений must. В вашем первом сценарии все подзапросы должны совпадать, фактор координат не задействован, а параметр disableCoord
не действует. Во втором сценарии, при наличии нескольких предложений «должен», BooleanQuery
суммирует все промежуточные баллы, чтобы определить, какой из документов лучше соответствует. Идея состоит в том, что документ, который соответствует большему количеству подзапросов, является лучшим соответствием и, следовательно, получает более высокий балл.
Теперь представьте запрос x OR y
и документ, в котором 1000 раз встречается x
, но ни одного y
. При использовании TF/IDF, из-за высокого termFreq(x)
, дополнительный балл x
очень высок, как и результирующий балл x OR y
, который может продвигать этот документ перед другими, которые соответствуют обоим полям, а это не то, для чего предназначался BooleanQuery
. делать. Здесь в игру вступает координата.
Коэффициент координат рассчитывается для каждого документа как number of should clauses matched/total number of should clauses in query
. Это в основном дает число в [0..1]
, которое представляет, сколько подзапросов соответствует документу. Суммарный балл всех подзапросов затем умножается на этот координатный коэффициент. Документ, соответствующий всем предложениям must, будет иметь первоначальную оценку всех суммированных подзапросов, а документ, соответствующий только x
из x OR y
, будет иметь вдвое уменьшенную оценку, противодействуя высокой оценке, которую дал перенасыщенный x
. Если вы отключили координаты, этот фактор не будет рассчитываться, и окончательный балл будет представлять собой только сумму промежуточных баллов.
Coord был разработан с учетом TF/IDF, и другие формулы подобия могут не страдать от перенасыщения терминов. BM25, который стал аналогом по умолчанию в Lucene 6.0, гораздо лучше контролирует такие перенасыщенные термины, контролируемые его параметр k1. Вместо оценки, которая растет почти линейно с увеличением termFreq, BM25 приближается к пределу и прекращает расти. Он не дает повышения для документов с termFreq=1000 по сравнению с документом с termFreq=5, но делает это для termFreq=1 по сравнению с termFreq=0. Бритта Вебер выступила с рассказом на модных словечках об этом, где она объяснила кривую насыщения.
Это означает, что для BM25 фактор координат больше не нужен и может фактически привести к нелогичным результатам. Он уже удален из мастера Lucene и исчезнет в версии 7.0.
Если вы используете Lucene 6.x с аналогом по умолчанию BM25, рекомендуется всегда отключать координацию, так как BM25 не страдает от проблемы с координацией, которую удалось обойти. Если вы используете TF/IDF (независимо от версии 6.x или нет), отключение coord даст вам более предсказуемые результаты только в том случае, если ваши частоты терминов равномерно распределены (чего практически никогда не бывает), а установка disableCoord
на false default) даст результаты, которые интуитивно лучше.
person
knutwalker
schedule
11.09.2016