2015-06-10 2 views
1

Предположим, у меня есть 5 таблиц groups, posts, groups_posts, post_comments и posts_votes.RDBMS to Elastic Search

groups таблица имеет поля: user_id, name и description, posts имеет поля: user_id и comment

Взаимосвязь между groups и posts является MANY_2_MANY поэтому каждая запись может принадлежать многим группам, и каждая группа может содержать 0- * Сообщения. Это то, что делает таблица groups_posts.

post_comments таблица имеет поля: text, post_id, user_id, added_at (дата), total_comments, total_votes

posts_votes таблица имеет поля: post_id, user_id и vote_at (дата)

Я хочу моделировать эти структуры в Elastic Search. Основная причина, по которой мне нужен быстрый поиск наиболее популярных сообщений из групп пользователей (пользователь может принадлежать 0- * группе) для определенного пользователя за последние 12 часов на основе суммы комментариев для сообщений и публикации голосов за это количество времени.

Не могли бы вы рассказать мне, как эффективно сопоставлять это с индексами эластичного поиска.

ответ

0

Думаю, вам придется принять некоторые решения.

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

Поскольку у нас нет объединений в поиске elastics, вам необходимо объединить данные, связанные с данными, например. Поместите все данные, относящиеся к пользователю вместе, так что ваши данные будут выглядеть следующим образом:

[ 
    { 
    "user_id":123, 
    "groups": [ 
     { 
     "name":"my group", 
     "posts_by_user":[ // only comments by this user 
      { 
      "content": "foo bar baz", 
      "votes":5 
      }, 
      { 
      "content": "bar baz quux", 
      "votes": 43 
      }, 
      ... other posts by this user in this group 
     ] 
     }, 
     ... other groups 
    ] 
    }, 
    ... other users 

Также: Прочитайте это: https://www.elastic.co/guide/en/elasticsearch/guide/current/modeling-your-data.html

+0

Спасибо за ваш ответ, один дополнительный вопрос - если я не заинтересованы в индексировании данных каждый день, но мне нужно найти сообщения в диапазоне данных - Теперь (дата/время, когда происходит поиск) -12h? Как организовать индекс в этом случае? – alexanoid

+0

И еще одна вещь - я ищу не для сообщений пользователя (отправленных этим пользователем), а для сообщений, которые были отправлены в группы, которые следует за этим пользователем (связанные через таблицу groups_posts с отношением MANY_2_MANY) – alexanoid

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