Solr Схема Дизайн - PullRequest
       7

Solr Схема Дизайн

1 голос
/ 13 апреля 2011

У меня есть несколько вопросов относительно дизайна схемы solr.По сути, я настраиваю поисковую систему для веб-сайта каталога продуктов, и мои таблицы взаимосвязи таковы:

  • Product Принадлежит Merchant
  • Product Принадлежит Brand
  • Product имеет и принадлежит многим Categories
  • Category имеет много Sub Categories
  • Sub Category имеет много Types
  • Type имеет много Sub Types

Пока мой Schema.xml выглядит следующим образом.

<field name="product_id" type="string" indexed="true" stored="true" required="true" /> 
<field name="name" type="string" indexed="true" stored="true"/>
<field name="merchant" type="string" indexed="true" stored="true"/>
<field name="merchant_id" type="string" indexed="true" stored="true"/>
<field name="brand" type="string" indexed="true" stored="true"/>
<field name="brand_id" type="string" indexed="true" stored="true"/>
<field name="categories" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="sub_categories" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="types" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="sub_types" type="string" multiValued="true" indexed="true" stored="true"/>
<field name="price" type="float" indexed="true" stored="true"/>
<field name="description" type="text" indexed="true" stored="true"/>
<field name="image" type="text" indexed="true" stored="true"/>

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

<uniqueKey>product_id</uniqueKey>

<defaultSearchField>text</defaultSearchField>

<solrQueryParser defaultOperator="OR"/>

<copyField source="name" dest="text"/>
<copyField source="merchant" dest="text"/>
<copyField source="brand" dest="text"/>
<copyField source="categories" dest="text"/>
<copyField source="sub_categories" dest="text"/>
<copyField source="types" dest="text"/>
<copyField source="sub_types" dest="text"/>

Итак, мои вопросы сейчас:

1) Правильна ли схема?

2) Предположим, мне нужно найти продукты для Category XYZ.Мой старший программист не любит запрашивать solr по Category Name, вместо этого он не хочет использовать CategoryID.Он предлагает сохранить CategoryID_CategoryName (1001_Category XYZ) и с веб-сайта отправляет ID.(Предполагая, что Имена с пробелами не работают должным образом.)

Поэтому, чтобы найти продукты, я должен затем выполнить частичное совпадение categories и определить идентификатор категории из строки, то есть (fetch 1001 from 1001_Category XYZ) или Чтоесли я оставлю Имена в поле categories и настрою другое поле для category_ids?это кажется лучшим вариантом для меня.

или

существует ли какой-либо многозначный тип поля Solr для хранения CategoryID и CategoryName вместе?

Дайте мне знать ваши мысли, спасибо.

1 Ответ

3 голосов
/ 14 апреля 2011

Ответы на ваши вопросы.

  1. Может быть - это зависит от того, как вы планируете структурировать свои запросы, что вы собираетесь искать и что вы намереваетесь получить в результатах поиска.В вашей схеме вы храните и индексируете все, что может быть довольно неэффективным.Индексируйте то, что вы намереваетесь запросить, сохраняйте то, что вы намереваетесь получить / отобразить.Если бы вы искали оптимизации, я бы рассмотрел типы данных, используемые в схеме, - постарайтесь оставаться как можно более родными для исходного типа.
  2. Запросы по CategoryId - ваш программист прав, вы хотите сделать запросИдентификатор категорииВаш подход к хранению Идентификаторов и Имен в отдельных полях также точен.Предполагая, что ваши поля на основе идентификатора являются целыми / длинными, вы не хотите структурировать их как строки, а скорее как целые / длинные.
...