2015-10-20 3 views
0

У меня есть информация о продукте, хранящаяся в моей базе данных solr. Продукт может быть частью нескольких категорий.Информация о категории магазинов в Solr

Теперь я хочу хранить информацию об этих категориях внутри продукта, который принадлежит этим категориям. (Есть ли другой способ?)

Итак, скажем, произведение A относится к категориям C1 и C2 с идентификаторами I1 и I2. Теперь, как сохранить это сопоставление I1-C1 в моем продукте A? Какая должна быть схема?

Но если вы просто сохраните список идентификаторов, имен и некоторых других данных (например, URL-адресов), то отображение каждого идентификатора на имя или URL будет потеряно. Например:

<field name="category_ids" type="tints" indexed="true" stored="true"/> 
<field name="category_names" type="strings" indexed="true" stored="true"/> 

Как хранить документы?

+0

На самом деле, лучший вопрос заключается в том, как вы собираетесь ** искать ** эти документы, а затем проектировать индекс для этого. –

+0

поиск может все же произойти в списке идентификаторов/имен, которые будут поддерживаться вместе с отображением. Но теперь любое новое поле не нужно добавлять, так как порядок сложения в многозначном поле будет сохранен. Это автоматически отобразит идентификаторы в информацию в соответствующих полях. –

ответ

1

Как вы описали работы - Solr будет поддерживать последовательность между полями одинаково, поэтому вы можете предположить, что первое значение в поле category_ids соответствует первому значению в поле category_names. Мы используем это для индексации более сложных объектов в нескольких полях с несколькими значениями.

Второе решение - использовать идентификатор категории для поиска фактической информации о категории в вашем промежуточном программном обеспечении, запрашивая базу данных для соответствующей информации. Это позволит избежать переопределения всех документов для категории, если имя изменяется (за исключением случаев, когда вы используете имя для запроса, что потребует от вас повторного индекса, независимо от выбранного решения).

Третьим решением должно быть поле, содержащее как идентификатор, так и имя в виде сериализованной формы, например 3;Laptops или как JSON, и просто сохранять это поле, не индексируя его (и использовать индексированное, не сохраненное поле для фактический поиск).

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

+0

Является ли заказ всегда гарантированным? Можете ли вы указать мне на какую-то документацию solr, в которой говорится об этом? Да, хотя я использовал дочерние документы, но бросил его, потому что это сделает систему излишне сложной. Если это нужно сделать таким образом, тогда это может быть лучше обработано в промежуточном программном обеспечении. –

+0

Да, заказ гарантирован. Мы занимаемся этим в производстве с 2008 года IIRC. Лучшее, что я мог найти, - это [этот поток почты] (https://www.mail-archive.com/[email protected]/msg74780.html) о проблеме. – MatsLindh

+0

Прохладный. Это упростит многое. Благодаря :) –

Смежные вопросы