2012-04-16 3 views
2

Приведу пример данных. (чисто для демонстрации, я не много о машине знаю)Как мне моделировать мои данные (многоуровневые, многоуровневые) для django-haystack?

высшей категории,

Car, Computer, Shoes, .. 

Автомобиль имеет много граней. (Подкатегорию)

Car - 2 door/4 door 
Car - Audi/Bmw/.. 

Sub категория может иметь другое подкатегорию.

Audi - A series/S series/R series 

Теперь у продукта может быть несколько родителей.

Audi A4 -child of- A series - Audi - Car 
Audi A4 -child of- 4 door - Car (one shorter depth) 

Как бы я смоделировал это в БД?

Я рассмотрел несколько подходов, основанных на RDBMS, для поиска возможностей, и это выглядит ужасно для поддержания.
Я смотрю на django-haystack, solr.
Но все же мне нужно смоделировать это в моделях django.py.

Как бы это сделать и сделать индекс поиска для стога сена?

Я новичок в целом django/haystack/solr.
Я посмотрел пример документа solr.
Похоже, каждый пункт имеет все необходимые данные в нем. (Я предполагаю, что люди называют это сплющенные-данные?)

Могу ли я как-то отдельные мета-данные (категория деревьев) из данных (фактический элемент продукта) в БД ?
Я просто чувствую, что это правильный подход, я не прав?

  • EDIT

Я забыл упомянуть, что я хотел бы использовать граненый возможность поиска в Solr.
Итак, после моделирования в DB, ​​как бы выглядел бы мой search_indexes.py для haystack?

+0

Отметьте это [ответ на другой вопрос] (http://stackoverflow.com/a/11318758/279564), в котором указаны подтипы и супертипы. – Rafa

ответ

0

Это две разные вещи.

Одним из них является сохранение нескольких свойств элемента. Для этого, если вы хотите использовать реляционную базу данных, используйте entity-attribute-value pattern. eav-django обеспечивает эту реализацию для django.

Однако более гибким (и менее громоздким) подходом было бы использование базы данных документов (например, кушетки) или других решений NoSQL. Они обеспечивают гибкую схему, поэтому вам не нужно беспокоиться о том, сколько «свойств» или «метаданных» вы должны хранить о конкретном объекте/элементе.

Другая часть вашего вопроса - сохранение дерева отношений с n -depth. Это реализовано с использованием nested set model (также называемого измененным обходом дерева предварительного заказа). Как и eav, есть django-mptt.

+0

Спасибо за предложение.Я не полностью понимаю EAV, но он выглядел довольно сложно, и вложенная модель набора не поддерживает несколько родителей (категории). Тогда я обнаружил, что solr-фасетный поиск способен делать то, что я хочу. Как я упоминал в сообщении, в примере solr есть все метаданные и данные в одном файле. Я хотел бы отделить метаданные от данных и сохранить их в БД, и в то же время использовать возможность параллельного поиска. Надеюсь, это имеет смысл. – eugene

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