2014-02-20 3 views
0

Я пытаюсь сравнить два документа в solr (например, Doc A, Doc B) на основе общего поля «имя», используя запрос solr. Основываясь на запросе A.name, я получаю документ B результата с оценкой релевантности, например SCR1. Теперь, если я делаю это обратным образом, то есть я запрашиваю с B.name, и я получаю документ A где-то в результате, но на этот раз оценка B с A равна , а не того же SCR1.Сравнение двух документов solr

Я считаю, что это происходит из-за отсутствия. терминов в Doc A.name и Doc B.name отличаются, поэтому оценка подобия не одинакова. Это причина этой разницы?

В любом случае, я могу получить такой же результат в любом случае (как описано выше)?
Невозможно сравнить оценку любых двух запросов? Возможно ли это в родных API Lucene?

ответ

0

Чтобы ответить на второй вопрос, не следует сравнивать десятки двух документов.

Аналогичный вопрос был отправлен в списке рассылки lucene для пользователей java-users.

Вот ссылка на него: Compare scores across queries

Дано объяснение там, почему не надо этого делать.

0

Я не совсем уверен, что я ясно на запросы вы имеете в виду, но, скажем, ситуация что-то вроде этого:

  • Doc A: Name = «Карлос Фернандо Луис Мария Víctor Мигель Рафаэль Гонзага Хавьер Франсиско де Ассис Хосе Симау де Браганса, САБОЙЯ Bourbon е Саксен-Coburgo-Гота»

  • Doc B: Name = "Томас Антониу Гонзага"

Если вы ищете «gonzaga», Doc B получит более высокий балл, так как, несмотря на то, что у каждого имени есть одно совпадение, Doc B имеет гораздо более короткое имя, всего три слова, а более короткие поля взвешиваются более сильно. Это LengthNorm, на который ссылаются в TFIDFSimilarity documentation.

Есть и другие факторы. Если мы просто швырнуть каждое имя в queryparser, и посмотреть, что идет вверх, что-то вроде:

Query queryA = queryparser.parse(docA.name); 
Query queryB = queryparser.parse(docB.name); 

Тогда запросы, генерируемые сильно отличаются:

name:carlos name:fernando name:luis name:maria name:victor name:miguel name:rafael name:gabriel name:gonzaga name:xavier name:francisco name:de name:assis name:jose name:simao name:de name:braganca name:baboia name:bourbon name:e name:saxe name:coburgo name:gotha 

против

name:tomas name:antonio name:gonzaga 

там это множество причин, по которым они будут генерировать разные баллы. Рассматриваемый выше lengthNorm координирующий фактор, который повышает результаты, которые в большей степени удовлетворяют запросам, скорее всего, вступает в игру, tf, который весит документы с большим количеством совпадений в течение более длительного срока, idf, который предпочитает термины, которые появляются менее часто на протяжении всего индекс и т. д. и т. д.

Оценки относятся только к результирующему набору запроса. Изменение запроса или состояние индекса может привести к разным оценкам, и они не предназначены для сопоставимости.Вы можете использовать IndexSearcher.explain, чтобы понять, как рассчитывался счет.

+0

«Есть множество причин, почему они будут генерировать одни и те же оценки». вы имели в виду, почему они ** не ** генерируют одинаковый балл? В вашем примере queryA и queryB, скажем, для ответа queryA мы получаем DocB со счетом SCR1 и для ответа queryB получаем DocA с SCR1. Будут ли эти две оценки одинаковыми. Похоже, этого не будет, но просто хочу уточнить вопрос. – Ganesh

+1

Правильно. Вы не ожидали, что баллы будут равны. Даже в простом случае, когда это единственные два документа, lengthNorm, коэффициент координации и queryNorm будут разными. – femtoRgon

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