Solr - запрос по всем областям лучшей практики

фрагмент schema.xml:

   <field name="id" type="string" indexed="true" stored="true" required="true" />
   <field name="notes" type="text_general" indexed="true" stored="true"/>
   <field name="missionFocus" type="text_general" indexed="true" stored="true"/>
   <field name="name" type="text_general" indexed="true" stored="true"/>
   <field name="first_name" type="text_general" indexed="true" stored="true"/>
   <field name="last_name" type="text_general" indexed="true" stored="true"/>
   <field name="about_me" type="text_general" indexed="true" stored="true"/>
   <field name="message" type="text_general" indexed="true" stored="true"/>
   <field name="title" type="text_general" indexed="true" stored="true"/>  
   <field name="table_type" type="string" indexed="true" stored="true"/>  

   <field name="text" type="text_general" indexed="true" stored="false" 
          multiValued="true"/>

Теперь я хочу искать во всех полях (кроме "id" и "table_type" ), например. "Здравствуйте". Как я могу это сделать? Должен ли я писать следующее?

/solr/select/?q=notes:hello missionFocus:hello name:hello first_name:hello ..

Я слышал что-то о DisMaxRequestHandler, но как мне нужно запрашивать этот обработчик? Мне нужно что-то изменить в файле solrconfig.xml?

Ответы

Ответ 1

Лучшим решением является создание поля, которое собирает данные всех полей, таких как

<field 
    name="collector" 
    type="text_general" 
    indexed="true" 
    stored="false" 
    multiValued="true"
/>

Единственное, что вам нужно сделать сейчас, - скопировать содержимое всех полей в это поле:

<copyField source="notes"        dest="collector"/>
<copyField source="missionFocus" dest="collector"/>
<copyField source="name"         dest="collector"/>
....

Имейте в виду, что блок copyField должен быть определен НИЖЕ:

<fields>
....
</fields>

Теперь вы можете искать только в поле collector, и вы найдете любой текст в любом из полей.