SOLR - использовать одно текстовое поле в схеме для полнотекстового поиска

Я знакомлюсь с SOLR.

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

Например, в терминах базы данных у меня есть таблица «Новости» и таблица «Сотрудник», и я хочу найти слово «яблоко», мне все равно, в каком поле оно находится, я только хочу получить идентификатор базы данных из записей, которые содержать его.

Может ли быть решение, что я использую схему SOLR примерно так:

<fields>
   <field name="id" type="string" indexed="true" stored="true"/> 
   <field name="content" type="text" indexed="true" stored="false"/>
</fields>

Итак, мне нужен только идентификатор и содержимое. Я помещаю все данные, в которых я хочу иметь возможность поиска, в одно поле «контент». Когда я ищу некоторые слова, он ищет их в «id» и в «content».

Это хорошая идея? Любая проблема с производительностью или дизайном?

Спасибо, Тамас


person Tamas Molnar    schedule 22.02.2013    source источник


Ответы (2)


См. https://wiki.apache.org/solr/SchemaXml#Copy_Fields. В нем говорится:

Общим требованием является копирование или объединение всех полей ввода в одно поле solr. Это можно сделать следующим образом:

<copyField source="*" dest="text"/>

Обычно это делается для поиска по нескольким полям.

Но если вам даже не нужны исходные поля, просто объедините все свои поля в одно большое поле content и проиндексируйте его в Solr. С этим не должно быть проблем.

person arun    schedule 22.02.2013

Вы можете либо скопировать поле в текст (см. пример в дистрибутиве), либо установить его как поле по умолчанию (параметр "df" в solrconfig.xml для обработчика выбора).

Или, если вы ожидаете более сложных требований в будущем и/или нетекстового поиска, я бы рекомендовал посмотреть eDismax с параметром qf, и он сам выполнит поиск по всем этим полям.

person Alexandre Rafalovitch    schedule 22.02.2013