Solr Facet Несколько слов со значениями, разделенными запятыми

Я загружаю данные в solr из mysql. Одно из полей генерируется с помощью функции group_concat, результатом которой является поле, разделенное запятыми, в котором перечислены все полосы для события. В то время я считаю, что это был лучший способ хранить несколько групп для одного мероприятия. Однако я обнаружил, что не могу сопоставить этот запрос со всеми событиями.

Я установил для поля полосы строку, а для многозначного значения — значение true.

<field name="bands" type="string" indexed="true" stored="true" multiValued="true"/>

Результат будет таким, как и ожидалось, когда строка разделена на одну длинную строку.

«Жемчужное варенье, Алиса, Кричащие деревья, Everclear», 1, «Примус, Гага, Кусочки бекона», 1, «Петухи, крылья, барабанные палочки, хвостовые перья», 1,

Самая большая проблема с этим подходом заключается в том, что когда тип поля является строкой, он не доступен для поиска. Похоже, мне нужно создать дубликат поля типа text_general для поиска и одно для фасетирования. Да?

Есть ли способ объявить разделитель для поля полосы, чтобы правильно его огранить, или мой подход неверен?


person bikedorkseattle    schedule 28.03.2012    source источник


Ответы (1)


Токенизация вашего поля не решит вашу проблему аспекта, вы сможете искать по одному названию группы и получать результаты, но аспект будет еще хуже. Основное правило заключается в том, чтобы не использовать токенизацию или улучшение текста для поля, используемого для создания фасетов.

Хорошо использовать поле с несколькими значениями, но на самом деле в него помещается одно значение со списком полос, потому что ваш запрос возвращает этот список в виде одного столбца, который сопоставляется с одним значением для связанного поля в Solr.

Вы можете сохранить вывод group_concat и решить проблему, просто изменив data-config.xml, указав Solr разделить эти имена групп с помощью разделителя. Взгляните на RegexTransformer и его параметр splitBy:

splitBy: используется для разделения строки для получения нескольких значений, возвращает список значений.

Если вы настроите splitBy с тем же разделителем, который вы используете для group_concat, трюк будет выполнен, у вас будет несколько значений, и ваш фасет будет хорошо выглядеть.

person javanna    schedule 28.03.2012
comment
работал как шарм! Итак, звучит так, что мне нужно сделать для любого поля, которое я хочу фасетировать, а также для поиска, сделать немаркированное поле для фасета и токенизированное для поиска. - person bikedorkseattle; 29.03.2012
comment
+1 Я думал, вам нужно написать приложение для разделения строки на несколько значений. - person Jesvin Jose; 29.03.2012
comment
Можете ли вы показать, где поставить splitBy? Изменит ли это значение, хранящееся в поле, или может заполнить новое поле на основе значения другого поля, разделенного запятыми? - person devios1; 14.01.2015
comment
Я понял: <field column="newfieldname" sourceColName="originalfield" splitBy="," />. Конечно, newfieldname должен быть объявлен в файле schema.xml. - person devios1; 15.01.2015