Отображение ассоциативного массива в Elasticsearch

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

что у меня в настоящее время есть:

один продукт типа product индекс products:

{
    "name":"Nexus 10",
    "category":"Tablets",
    "interests": {
        "1":30,
        "3":70
    }
}

Как видите, поле interests - это ассоциативный массив. Ключ-это User ID и значение the number of times the user talked about this product.

динамическое отображение предоставило мне :

{
   "products":{
      "mappings":{
         "product":{
            "properties":{
               "category":{
                  "type":"string"
               },
               "interests":{
                  "properties":{
                     "1":{
                        "type":"long"
                     },
                     "3":{
                        "type":"long"
                     },
                  }
               },
               "name":{
                  "type":"string"
               }
            }
         }
      }
   }
}

чего я хочу :

так как у меня будет много записей в interests поле, я не хочу, чтобы динамические сопоставления каждого ID.

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

Я хотел бы иметь возможность отображать такую структуру.

у вас есть идея, как достичь это?

спасибо,

1 ответов


вам нужно будет изменить определения объектов.

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

Это достаточно распространенный вопрос / проблема, что я посвятил этому раздел в своей статье на Устранение неполадок поиск Elasticsearch, для начинающих.

что вы, вероятно, хотите сделать, это использовать вложенные документы или отношения "родитель-потомок". Если вы обновляете счетчики очень часто, вы хотите использовать parent-child, так как вложенные документы вызовут переиндексацию всего. Вложенный doc будет быстрее время поиска, хотя, и вы, скорее всего, захотите как-то дросселировать обновления.

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

name: Nexus 10
category: Tablets
interests: 
    - user_id: 1
      mentions: 30
    - user_id: 3
      mentions: 70