Solr 7.6.0: Как объединить разные QueryParser в одном запросе? - PullRequest
2 голосов
/ 18 апреля 2019

Я просто хочу объединить запрос объединения блоков и основной запрос с edismax-parser, как я это делаю для solr <7.2 </p>

berlin OR _query_:"{!parent which=type:book}page_content:berlin"

Но edismax больше не может быть парсером по умолчанию для этой цели (s. https://issues.apache.org/jira/browse/SOLR-11501)

Так что он работает с lucene-QueryParser для запросов родителей:

q={!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

он все еще работает для добавления основного запроса, например

q=title:berlin* AND {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

но когда я пытаюсь

q={!edismax qf='title' v='berlin'} OR {!parent which="type:book"}{!edismax qf='page_content' v='berlin'}

оценивается только первая часть запроса.

Мои документы:

<add>
  <doc>
    <field name="id">1</field>
    <field name="type">book</field>
    <field name="title">Book about Berlin</field>
    <field name="pages">
    <doc>
      <field name="id">11</field>
      <field name="type">page</field>
      <field name="page_content">berlin in winter</field>
    </doc>
    <doc>
      <field name="id">12</field>
      <field name="type">page</field>
      <field name="page_content">berlin in spring</field>
    </doc>
    <doc>
      <field name="id">13</field>
      <field name="type">page</field>
      <field name="page_content">berlin in summer</field>
    </doc>
  </field>
 </doc>
 <doc>
    <field name="id">2</field>
    <field name="type">book</field>
    <field name="title">Big book about Tokio</field>
    <field name="pages">
    <doc>
      <field name="id">21</field>
      <field name="type">page</field>
      <field name="page_content">tokio in winter</field>
    </doc>
    <doc>
      <field name="id">22</field>
      <field name="type">page</field>
      <field name="page_content">tokio in spring</field>
    </doc>
    <doc>
      <field name="id">23</field>
      <field name="type">page</field>
      <field name="page_content">tokio in summer</field>
    </doc>
  </field>
 </doc>
</add>

У кого-нибудь есть такая же проблема?

Большое спасибо!

1 Ответ

0 голосов
/ 19 апреля 2019

Это потому, что, начиная с Solr 7.3, значения по умолчанию для полей поиска для edismax фактически запрещают использование встроенного запроса.

Надеемся, что этим поведением можно управлять с помощью параметра uf.

uf : Указывает, к каким полям схемы конечный пользователь имеет право явно запрашивать и переключать, поддерживаются ли встроенные запросы Solr.Этот параметр поддерживает подстановочные знаки.Несколько полей должны быть разделены пробелом.

По умолчанию разрешены все поля и нет встроенных запросов Solr, что эквивалентно uf=* -_query_.

Установить uf=* _query_, чтобы разрешить встроенныезапросы.

Я тестировал его на Solr 7.7.1, он работает, но мне пришлось заключить встроенный запрос в двойные кавычки, иначе запрос whole завершится неудачно , возвращая 0 результатовбез какого-либо уведомления.

Этот запрос должен работать:

defType=edismax&uf=* _query_&q=title:berlin* OR "{!parent which="type:book"}page_content:berlin"

Примечание: в документации есть примеры для Solr <7.3, в которых упоминается разделенный запятыми список в параметре <code>uf, но ожидаемыйразделитель определенно является пробелом.

Для тех, кто не использует edismax , вам придется установить luceneMatchVersion=7.1.0 для полной обратной совместимости.

...