asticSearch получает данные из двух индексов в одном объекте - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть индекс пользователей и сообщений . В почтовом индексе у меня есть параметр user_id, и когда я ищу сообщение в posts index, используя user_id, я должен получить этот пост и пользовательские данные полностью в одном объекте. Как я могу отправить поисковый запрос по двум индексам?

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Я создал следующие модели данных в качестве образца. Мой индекс будет иметь модель данных в следующем формате.

Posts:
 - post_id
 - title
 - description
 * comments
   - user_id
   - firstname
   - comment

* - meaning multiple values

Обычно я сохраняю все данные одного сообщения в одном документе .

Пример отображения

PUT post
{  
   "mappings":{  
      "mydocs":{  
         "properties":{  
            "comments":{  
               "type":"nested",
               "properties":{  
                  "userid":{  
                     "type":"text"
                  },
                  "firstname":{  
                     "type":"text"
                  },
                  "comment":{  
                     "type":"text"
                  }
               }
            },
            "post_id":{  
               "type":"text"
            },
            "post_description":{  
               "type":"text"
            },
            "post_title":{  
               "type":"text"
            },
            "owner":{  
               "type":"text"
            }
         }
      }
   }
}

Образец документа

POST post/mydocs/1
{
  "post_id": "1",
  "owner": "1",
  "post_description": "I'm doing some analysis on this and its very confusing. Can anyone help me here?",
  "post_title": "neo4j vs elasticsearch",
  "comments": [
    {
      "userid": "2",
      "firstname": "John",
      "comment": "Both are totally different here"
    },
    {
      "userid": "3",
      "firstname": "Jack",
      "comment": "Depends on the user case, doesn't it. "
    }
  ]

}

Пример запроса

POST post/_search
{  
   "_source":[  
      "post_id",
      "comments.userid",
      "comments.firstname"
   ],
   "query":{  
      "bool":{  
         "must":[  
            {  
               "match_all":{}  // you can put any condition here 
            },
            {  
               "nested":{  
                  "path":"comments",
                  "query":{  
                     "match":{  
                        "comments.userid":"2"
                     }
                  }
               }
            }
         ]
      }
   }
}

Ну, это может быть не идеально и может выглядеть нечетко / забавно, однако я надеюсь, что это поможет вам в вашем понимании.

Фактически вы можете проверить модель данных stackoverflow (сущность с именем POST ) и их реализациюasticsearch. Обратитесь к этому LINK , чтобы увидеть, как они смоделировали свои post в своей базе данных rdbms, и к этому LINK , чтобы увидеть, как они создали индекс для той же самой таблицы.

Я действительно надеюсь, что это поможет:)

0 голосов
/ 11 ноября 2018

Пожалуйста, обратите внимание на функцию мульти-поиска: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html

Ответ - это массив ответа и статуса поиска для каждого поискового запроса, сохраняющий порядок запроса множественного поиска

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