2013-06-24 3 views
2

im пытается использовать elasticsearch для поиска по продуктам. Если у продукта есть автомобиль, например, у него будет поле, такое как «цвет», «бренд», «модель», «км», ... Если это одежда, у нее будут только «цвет», «размер», , ... Я хотел бы проиндексировать всю эту информацию в эластичной форме, чтобы иметь возможность затем искать автомобили с км между aaa км и bbb км и/или модель xxxx, то же самое для одежды или любых других продуктов.различное поле по категориям

Как я могу создать такое поле (ы) в elasticsearch? Я хочу, чтобы все продукты были в одном и том же индексе, поэтому пользователь может выполнять поиск по всем продуктам, но также, если пользователь ищет тип продукта, тогда он должен иметь возможность указать некоторые подробности в соответствии с этим видом продукта.

Я думал о поле массива, но означает ли это, что все продукты будут иметь все поля, соответствующие всем типам продуктов, даже если некоторые поля не имеют отношения к некоторым продуктам (например, одежда будет иметь поле km?)? Или возможно ли при индексировании разместить только необходимую информацию, соответствующую каждому продукту?

спасибо

ответ

0

Вы можете использовать типы. Создайте тип, называемый автомобилем с цветом полей, брендом, моделью, k и т. Д., А затем тип, называемый тканью с цветом полей, размером и т. Д.

Один индекс может иметь много типов. Следующие две ссылки могут помочь вам в этом:

  1. Creating indices

  2. Creating types and mapping to the index

Вы можете легко осуществлять поиск по типам, так что вы могли бы выдать поиска, как это вернуть все документы образуют все типы в пределах этого индекса:

curl -XGET http://localhost:9200/_search?pretty=true -d '{"query":{"matchAll":{}}}' 

Дополнительная информация - Searching across types

Наличие поля массива не является хорошей идеей, так как вы не будете использовать способность elasticsearch индексировать полуструктурированные документы.

Все самое лучшее.

+1

Благодарим за ответ. Мне кажется, это то, что мне нужно. Но есть ли способ оптимизировать или сделать вид наследования, так как все продукты имеют некоторые общие поля, такие как цена, категория, дата, изображения, ... – user2016483

+0

Нет прямого способа довести вид наследования, который вам нужен, в elasticsearch , но вы можете легко имитировать одно и то же поведение, определяя одни и те же поля во всех типах только один раз на этапе отображения вставки. После определения вставки могут быть сделаны, и поиск может быть выполнен так, как если бы было наследование среди полей. – Sai

+0

Что касается оптимизации процесса, посмотрите http://stackoverflow.com/questions/15694724/shards-and-replicas-in-elsicsearch, а также на объемную индексацию. Всего наилучшего. – Sai