Индексация/сопоставление эластичного поиска со сложной типизированной схемой

Я новичок в ES, и мой первый проект на ES имеет некоторые сложности. Итак, приходя услышать просьбу о помощи.

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

ProductId: Int, Attribute_Key, Attribute_Name:String, Attribute_Value: String

Так для смартфона и книги записи могут выглядеть так:

phoneId, 3, "CPU Speed", "2GHz"
phoneId, 4, "RAM", "2GB"
bookId, 83, "Author", "Mark Twin"
bookId, 95, "Published", "1935"

На данный момент у меня около 50 имен атрибутов, это немного. Я хочу проиндексировать их все. В отличие от обычного механизма индексирования/сопоставления в ES, вы можете напрямую указать, какой «столбец» вы хотите индексировать. Для такого рода схемы, как я должен указать ES индексировать все возможные имена атрибутов? Так как у меня их всего около 50?

Например, я хочу индексировать по ОЗУ, Автору, Опубликовано. Это похоже на индексацию с несколькими полями, но у меня нет опыта в этом. Любая помощь приветствуется.

Спасибо,


person Shi Chen    schedule 04.10.2016    source источник
comment
какую версию эластичного поиска вы планируете использовать?   -  person Rajind Ruparathna    schedule 04.10.2016
comment
вы можете взглянуть на этот stackoverflow.com/a/13627218/1849366   -  person Rajind Ruparathna    schedule 04.10.2016
comment
Версия эластичного поиска 2.1.2.   -  person Shi Chen    schedule 04.10.2016


Ответы (1)


Используйте приведенное ниже сопоставление. Это будет индексировать только RAM, Author и Published.

"person" : {
   "properties" : {
       "CPU_Speed" : {
           "type" : "string", 
           "include_in_all" : false
        },
       "RAM" : {
           "type" : "string"
        },
       "Author" : {
           "type" : "string"
        },
       "Published" : {
           "type" : "string" 
        }
    }
}
person vinod_vh    schedule 04.10.2016
comment
Спасибо, Винод, похоже, мне нужно добавить все 40 имен атрибутов, и он не защищает имена будущих атрибутов. Размышление о комбинированном индексе двух полей имеет больше смысла. Но пока не знаю, как это сделать.... - person Shi Chen; 04.10.2016
comment
@ShiChen, я не получил ваш комментарий Думать о комбинированном индексе двух полей имеет больше смысла. Можете ли вы объяснить это кратко. - person vinod_vh; 14.10.2016