elasticSearch从一个对象中的两个索引获取数据

时间:2018-11-10 19:55:46

标签: elasticsearch elasticsearch-5

我有 users posts 的索引。 在帖子索引中,我有user_id参数,当我使用user_id搜索 帖子 索引中的帖子时,我应该在一个对象中获得完整的帖子和用户数据。 如何发送两个索引中的搜索查询?

2 个答案:

答案 0 :(得分:1)

请查看多重搜索功能:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-multi-search.html

响应是每个搜索请求的搜索响应和状态的数组,其中保留了多个搜索请求的顺序

答案 1 :(得分:0)

我创建了以下数据模型作为示例。我的索引将具有以下格式的数据模型。

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 的实体)及其弹性搜索实现。请参阅此LINK,以了解他们如何在其rdbms数据库中对post进行建模,以及查阅此LINK,以了解如何为同一张表创建索引。

我真的希望这会有所帮助:)