2014-04-03 4 views
3

В настоящее время у нас есть проблема с выполнением запроса (или, точнее, для создания сопоставления) в elasticsearch, который помогает нам выполнять запрос по реляционной проблеме, которую мы не получили с помощью нашего ориентированного на документацию мышления из sql.Использовать отношение many to many в Elasticsearch

Мы хотим создать отношение «многие ко многим» между различными элементами поиска Elasticsearch. Нам нужно это, чтобы отредактировать запись один раз и сохранить все обновления, обновленные до этого.

Чтобы описать проблему, мы будем использовать следующую простую модель данных:

Broadcast   Content 
    ------------  --------- 
    Id     Id 
    Day     Title    
    Contents []   Description 

Таким образом, мы имеем два различных типа индексировать, передачи и содержание. Широковещательная передача может содержать много содержимого, а одно содержимое может также быть частью различных передач (например, повторение).

JSON как:

index/broadcasts 
    { 
     "Id": "B1", 
     "Day": "2014-10-15", 
     "Contents": [ 
      "C1", 
      "C2" 
     ] 
    } 
    { 
     "Id": "B2", 
     "Day": "2014-10-16", 
     "Contents": [ 
      "C1", 
      "C3" 
     ] 
    } 
index/contents 
    { 
     "Id": "C1", 
     "Title": "Wake up", 
     "Description": "Morning show with Jeff Bridges" 
    } 
    { 
     "Id": "C2", 
     "Title": "Have a break!", 
     "Description": "Everything about Android" 
    } 
    { 
     "Id": "C3", 
     "Title": "Late Night Disaster", 
     "Description": "Comedy show" 
    } 

Теперь мы хотим переименовать «Late Night Disaster» в чем-то более точно и держать все ссылки в актуальном состоянии.

Как мы можем подойти к этому? Есть ли еще четыре варианта в ES, например, в RavenDB?

Вложенные объекты или отношения между родителями и детьми не помогли нам до сих пор.

+2

возможно дубликат [один-ко-многим в упругом Поиск] (http://stackoverflow.com/questions/13427434/one-to-many-relationships-in-elastic-search) – Nate

+0

@nyth вложенные не поддерживают многие-ко-многим –

ответ

0

Как насчет денормализации? кажется сложным, если мы исходим из мышления SQL, но дадим вам попробовать, даже с миллионами документов, индексирование LUCENE может помочь, и переименование будет пакетным заданием.

[ 
    { 
    "Id": "B1", 
    "Day": "2014-10-15", 
    "Contents": [ 
     { 
     "Title": "Wake up", 
     "Description": "Morning show with Jeff Bridges" 
     }, 
     { 
     "Title": "Have a break!", 
     "Description": "Everything about Android" 
     } 
    ] 
    }, 
    { 
    "Id": "B2", 
    "Day": "2014-10-16", 
    "Contents": [ 
     { 
     "Title": "Wake up", 
     "Description": "Morning show with Jeff Bridges" 
     }, 
     { 
     "Title": "Late Night Disaster", 
     "Description": "Comedy show" 
     } 
    ] 
    } 
] 
Смежные вопросы