Solr: FieldNorm отличается от документа, без ускорения документов

StackOverflow https://stackoverflow.com/questions/3102895

Вопрос

Я хочу, чтобы мои результаты поиска заказать по оценке, что они делают, но счет ненадлежащим образом рассчитывается. Это сказать, не обязательно неправильно, но иначе, чем ожидалось, и я не уверен, почему. Моя цель - удалить все, что изменяет счет.

Если я выполню поиск, который соответствует двум объектам (где ожидается, что Objecta будет более высокий балл, чем ObjectB), ObjectB возвращается первым.

Допустим, для этого примера, что мой запрос - это один срок: «Яблоки».

Название объекта: «Яблоки - яблоки» (2/3 термины)
Описание объекта: «Были яблоки в яблоках - яблоки, а теперь яблоки пошли все яблоки по всему яблокам!» (6/18 Условия)
Название объекта: «Яблоки отличные» (1/3 термины)
Описание COBLEB: «Были яблоки в яблоне-комнате, а теперь яблоки все плохо пошли на яблоки!» (4/18 Условия)

Поле названия не имеет повышения (или, скорее, повышение 1) и поле описания имеет повышение 0,8. Я не уточнил повышение документа через SolrConfig.xml или через запрос, который я пропускаю. Если есть другой способ указать повышение документа, есть вероятность того, что я скучаю по одному.

После анализа explain Распечатка, это выглядит как Objecta является Правильно расчет более высокого балла, чем ObjectB, так же, как я хочу, кроме как для один Разница: Заголовок HouseB FieldNorm всегда выше, чем объекта.


Здесь следует explain распечатка. Просто так вы знаете: поле названия mditem5_tns и поле описания mditem7_tns:

ObjectB:
1.3327172 = (MATCH) sum of:
  1.0352166 = (MATCH) max plus 0.1 times others of:
    0.9766194 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.8109303 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.0 = tf(termFreq(mditem5_tns:appl)=1)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        1.0 = fieldNorm(field=mditem5_tns, doc=0)
    0.58597165 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.3581977 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.0 = tf(termFreq(mditem7_tns:appl)=4)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm

ObjectA:
1.2324848 = (MATCH) sum of:
  0.93498427 = (MATCH) max plus 0.1 times others of:
    0.8632177 = (MATCH) weight(mditem5_tns:appl in 0), product of:
      0.53929156 = queryWeight(mditem5_tns:appl), product of:
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6006513 = (MATCH) fieldWeight(mditem5_tns:appl in 0), product of:
        1.4142135 = tf(termFreq(mditem5_tns:appl)=2)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.625 = fieldNorm(field=mditem5_tns, doc=0)
    0.7176658 = (MATCH) weight(mditem7_tns:appl^0.8 in 0), product of:
      0.43143326 = queryWeight(mditem7_tns:appl^0.8), product of:
        0.8 = boost
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.2977981 = queryNorm
      1.6634457 = (MATCH) fieldWeight(mditem7_tns:appl in 0), product of:
        2.4494898 = tf(termFreq(mditem7_tns:appl)=6)
        1.8109303 = idf(docFreq=3, maxDocs=9)
        0.375 = fieldNorm(field=mditem7_tns, doc=0)
  0.2975006 = (MATCH) FunctionQuery(1000.0/(1.0*float(top(rord(lastmodified)))+1000.0)), product of:
    0.999001 = 1000.0/(1.0*float(1)+1000.0)
    1.0 = boost
    0.2977981 = queryNorm
Это было полезно?

Решение

Проблема вызвана stemmer. Он расширяет «яблоки - яблоки» на «Яблоки Appl - это яблоки приложения», что делает поле дольше. В качестве документа B содержится только 1 термин, который расширяется на stemmer, поле остается короче, а затем документ A.

Это приводит к разным полямнормам.

Другие советы

FieldNorm вычисляется из 3 компонентов - усиление индекса-времени на поле, повышение индексного времени на длине документа и поля. Предполагая, что вы не поставляете никакого повышения индекса-времени, разница должна быть длина поля.

Таким образом, поскольку длины более высот для более коротких значений поля, для B чтобы иметь более высокое значение полевого времени для заголовка, он должен иметь меньшее количество токенов в заголовке, чем A.

Смотрите следующие страницы для подробного объяснения оценки Lucene:

http://lucene.apache.org/java/2_4_0/scoring.html. http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/similerity.html.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top