Solr булевы запросы в сочетании с ускорениями индекса - PullRequest
1 голос
/ 10 июля 2011

У меня есть сайт, использующий Solr 1.4.1 для актуальности / рекомендации.Я использую запросы в логическом стиле в некоторых местах.Я использую запрос наподобие +(+type:aoh_company +aoh_dictionary_tids:623) - и он дает ожидаемые результаты, но порядок результатов выглядит произвольным.

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

Пример

  • URL запроса: http://localhost:4930/solr/prod/select?rows=5&start=0&q.alt=(type%3Aaoh_company)+(aoh_dictionary_tids%3A623)&q=
  • Результаты возвращаются в этом порядке (сзначение увеличения индекса в скобках):
    1. 17132 (1,22)
    2. 17179 (1,02)
    3. 17131 (1,10)
    4. 17133 (1,10)
    5. 17184 (1.10)
  • Очевидно, что результат № 2 не должен предшествовать # 3-5 на основании только повышения.
  • Учитывая, что этологический запрос, не должно быть большой разницы в ранжировании.

Отладка вывода

Я попытался отладить запрос выше, добавив debugQuery=true к запросу, поэтому он становится http://localhost:4930/solr/prod/select?rows=5&start=0&q.alt=(type%3Aaoh_company)+(aoh_dictionary_tids%3A623)&q=&debugQuery=true

Это очень многословно, но вот оно:

<lst name="debug">
  <null name="rawquerystring"/>
  <null name="querystring"/>
  <str name="parsedquery">+(+type:aoh_company +aoh_dictionary_tids:623)</str>
  <str name="parsedquery_toString">+(+type:aoh_company +aoh_dictionary_tids:623)</str>
  <lst name="explain">
    <str name="50hves/node/17132">
    1.7819747 = (MATCH) sum of:
      0.9014403 = (MATCH) weight(type:aoh_company in 1805), product of:
        0.37135038 = queryWeight(type:aoh_company), product of:
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          0.15297863 = queryNorm
        2.4274657 = (MATCH) fieldWeight(type:aoh_company in 1805), product of:
          1.0 = tf(termFreq(type:aoh_company)=1)
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          1.0 = fieldNorm(field=type, doc=1805)
      0.88053435 = (MATCH) weight(aoh_dictionary_tids:623 in 1805), product of:
        0.9284928 = queryWeight(aoh_dictionary_tids:623), product of:
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15297863 = queryNorm
        0.9483481 = (MATCH) fieldWeight(aoh_dictionary_tids:623 in 1805), product of:
          1.0 = tf(termFreq(aoh_dictionary_tids:623)=1)
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15625 = fieldNorm(field=aoh_dictionary_tids, doc=1805)
    </str>
    <str name="50hves/node/17179">
    1.7819747 = (MATCH) sum of:
      0.9014403 = (MATCH) weight(type:aoh_company in 1896), product of:
        0.37135038 = queryWeight(type:aoh_company), product of:
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          0.15297863 = queryNorm
        2.4274657 = (MATCH) fieldWeight(type:aoh_company in 1896), product of:
          1.0 = tf(termFreq(type:aoh_company)=1)
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          1.0 = fieldNorm(field=type, doc=1896)
      0.88053435 = (MATCH) weight(aoh_dictionary_tids:623 in 1896), product of:
        0.9284928 = queryWeight(aoh_dictionary_tids:623), product of:
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15297863 = queryNorm
        0.9483481 = (MATCH) fieldWeight(aoh_dictionary_tids:623 in 1896), product of:
          1.0 = tf(termFreq(aoh_dictionary_tids:623)=1)
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15625 = fieldNorm(field=aoh_dictionary_tids, doc=1896)
    </str>
    <str name="50hves/node/17131">
    1.7819747 = (MATCH) sum of:
      0.9014403 = (MATCH) weight(type:aoh_company in 1905), product of:
        0.37135038 = queryWeight(type:aoh_company), product of:
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          0.15297863 = queryNorm
        2.4274657 = (MATCH) fieldWeight(type:aoh_company in 1905), product of:
          1.0 = tf(termFreq(type:aoh_company)=1)
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          1.0 = fieldNorm(field=type, doc=1905)
      0.88053435 = (MATCH) weight(aoh_dictionary_tids:623 in 1905), product of:
        0.9284928 = queryWeight(aoh_dictionary_tids:623), product of:
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15297863 = queryNorm
        0.9483481 = (MATCH) fieldWeight(aoh_dictionary_tids:623 in 1905), product of:
          1.0 = tf(termFreq(aoh_dictionary_tids:623)=1)
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15625 = fieldNorm(field=aoh_dictionary_tids, doc=1905)
    </str>
    <str name="50hves/node/17133">
    1.7819747 = (MATCH) sum of:
      0.9014403 = (MATCH) weight(type:aoh_company in 1906), product of:
        0.37135038 = queryWeight(type:aoh_company), product of:
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          0.15297863 = queryNorm
        2.4274657 = (MATCH) fieldWeight(type:aoh_company in 1906), product of:
          1.0 = tf(termFreq(type:aoh_company)=1)
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          1.0 = fieldNorm(field=type, doc=1906)
      0.88053435 = (MATCH) weight(aoh_dictionary_tids:623 in 1906), product of:
        0.9284928 = queryWeight(aoh_dictionary_tids:623), product of:
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15297863 = queryNorm
        0.9483481 = (MATCH) fieldWeight(aoh_dictionary_tids:623 in 1906), product of:
          1.0 = tf(termFreq(aoh_dictionary_tids:623)=1)
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15625 = fieldNorm(field=aoh_dictionary_tids, doc=1906)
    </str>
    <str name="50hves/node/17184">
    1.6058679 = (MATCH) sum of:
      0.9014403 = (MATCH) weight(type:aoh_company in 1892), product of:
        0.37135038 = queryWeight(type:aoh_company), product of:
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          0.15297863 = queryNorm
        2.4274657 = (MATCH) fieldWeight(type:aoh_company in 1892), product of:
          1.0 = tf(termFreq(type:aoh_company)=1)
          2.4274657 = idf(docFreq=457, maxDocs=1909)
          1.0 = fieldNorm(field=type, doc=1892)
      0.7044275 = (MATCH) weight(aoh_dictionary_tids:623 in 1892), product of:
        0.9284928 = queryWeight(aoh_dictionary_tids:623), product of:
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.15297863 = queryNorm
        0.7586785 = (MATCH) fieldWeight(aoh_dictionary_tids:623 in 1892), product of:
          1.0 = tf(termFreq(aoh_dictionary_tids:623)=1)
          6.069428 = idf(docFreq=11, maxDocs=1909)
          0.125 = fieldNorm(field=aoh_dictionary_tids, doc=1892)
    </str>
  </lst>
  <str name="QParser">DisMaxQParser</str>
  <str name="altquerystring">org.apache.lucene.search.BooleanQuery:+type:aoh_company +aoh_dictionary_tids:623</str>
  <null name="boostfuncs"/>
  <lst name="timing">
    <double name="time">7.0</double>
    <lst name="prepare">
      <double name="time">1.0</double>
      <lst name="org.apache.solr.handler.component.QueryComponent">
        <double name="time">0.0</double>
      </lst>
      <lst name="org.apache.solr.handler.component.FacetComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
    <double name="time">0.0</double>
  </lst>
  <lst name="org.apache.solr.handler.component.HighlightComponent">
    <double name="time">0.0</double>
  </lst>
  <lst name="org.apache.solr.handler.component.StatsComponent">
    <double name="time">0.0</double>
  </lst>
  <lst name="org.apache.solr.handler.component.SpellCheckComponent">
    <double name="time">0.0</double>
  </lst>
  <lst name="org.apache.solr.handler.component.DebugComponent">
    <double name="time">0.0</double>
  </lst>
  </lst>
  <lst name="process">
    <double name="time">6.0</double>
    <lst name="org.apache.solr.handler.component.QueryComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.FacetComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.MoreLikeThisComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.HighlightComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.StatsComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.SpellCheckComponent">
      <double name="time">0.0</double>
    </lst>
    <lst name="org.apache.solr.handler.component.DebugComponent">
      <double name="time">6.0</double>
    </lst>
  </lst>
</lst>

Пока я читаю, первые четыре результата оцениваются1.7819747, а пятый набрал 1.6058679, и я не вижу значений усиления где-либо там, поэтому кажется, что они не являются фактором в уравнении ранжирования.

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

Кроме того, вот соответствующие части из моего schema.xml:

<types>
  <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>
  <fieldType name="integer" class="solr.IntField" omitNorms="true"/>
</types>
<fields>
  <field name="type" type="string" indexed="true" stored="true"/>
  <field name="aoh_dictionary_tids"  type="integer" indexed="true" stored="true" multiValued="true" omitNorms="false"/>
</fields>

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

  • Достаточно ли включить нормы для одного из запрашиваемых полей для применения повышения?
  • Имеет ли мой omitNorms="false" в поле переопределить omitNorms="true" в поле fieldType?

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 июля 2011

Вы не увидите повышения в объяснении. Повышение во время индексации применяется к нормам определенного поля в определенном документе. Как мультипликатор.

Если у вас включены нормы, ваше значение bosst используется во время индексации. Нормы всегда являются частью функции подобия, если вы используете DefaultS Similarity, и нормы включены.

Изменить для последующих вопросов:

  1. Достаточно иметь включенные нормы, чтобы применить повышение. Потому что нормы обеспечивают поле в индексе весовой структурой данных в индексе. И увеличение времени индекса умножается на значение нормы и сохраняется в поле нормы.

  2. omitNorms в объявлении поля переопределяет определение типа - вы также видите это в своей структуре объяснения. aoh_dictionary имеет значение, которое не равно 1. Если нормы отключены, по умолчанию применяется значение 1.

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