Solr - помощь по схеме (атрибуты продукта) - PullRequest
3 голосов
/ 19 января 2011

Мне было интересно, сможет ли кто-нибудь из вас помочь мне с хранением атрибутов товара в Solr.У меня проблема в том, что атрибуты товара меняются в зависимости от категории товара.Из того, что я понял до сих пор, мне пришлось бы перечислить поля в моей схеме.Количество атрибутов довольно большое и постоянно меняется - что вы, ребята, предлагаете?

Например, продукт в категории рубашки может иметь атрибут size , ноу одного из категории realty может быть атрибут спальни .

(в настоящее время я планирую постоянно импортировать данные MySQL в Solr и использовать Solr в основном для поиска с гранями)

1 Ответ

8 голосов
/ 19 января 2011

Вы можете настроить динамические поля в solr. В schema.xml в блоке <fields> вы можете настроить динамические определения полей следующим образом:

<fields>
    ...

    <dynamicField name="*_t"  type="text"   indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_s"  type="string" indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_sa" type="string" indexed="true" stored="true" multiValued="true" />
    <dynamicField name="*_d"  type="date"   indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_f"  type="sfloat" indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_i"  type="sint"   indexed="true" stored="true" multiValued="false"/>
    <dynamicField name="*_ia" type="sint"   indexed="true" stored="true" multiValued="true" />
</fields>

Конкретные настройки, которые вы хотите, могут отличаться, но это основная идея.

Рассмотрим первое dynamicField определение выше. Это говорит о том, что вы можете динамически добавлять любые поля, заканчивающиеся _t, и эти поля будут обрабатываться как текстовые поля, будут проиндексированы и сохранены, и будут обрабатываться как одно значение (в отличие от массива). *

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

Тогда вот и все. Нет необходимости определять ваши конкретные поля, просто используйте суффиксы, которые вы настроили. Так, например, если вы использовали поля выше, вы можете сделать вставку с:

category_s = 'realty'
bedrooms_i = 4

Или вы можете сделать вставку с:

category_s = 'shirts'
size_s = 'M'
...