Elasticsearch 和后续的 Mongodb 查询

Posted

技术标签:

【中文标题】Elasticsearch 和后续的 Mongodb 查询【英文标题】:Elasticsearch and subsequent Mongodb queries 【发布时间】:2016-07-15 06:51:39 【问题描述】:

我正在使用 Elasticsearch 实现搜索功能。

我收到 Elasticsearch 返回的“用户名”集,之后我需要在 MongoDB 中查询一个集合以获取“用户名”集中每个用户的最新评论。

问题:假设我每次查询 Elasticsearch 时都会收到大约 100 个用户名,查询 MongoDB 以获取每个用户的最新评论的最快方法是什么。使用 .findOne() 在 for 循环中查询 MongoDB 100 次是唯一的选择吗?

(注意 - 因为用户的最新评论经常更改,我不想将其存储在 Elasticsearch 中,因为这会过于频繁地触发整个文档的检索-更改-重新索引过程)

【问题讨论】:

【参考方案1】:

此答案假定存储在 comments db 中的 mongo db 具有以下架构。


  "_id" : ObjectId("5788b71180036a1613ac0e34"),
  "username": "abc",
  "comment": "Best"

假设usernames是你从elasticsearch得到的用户列表,你可以执行下面的aggregate

a =[
    $match: "username":'$in':usernames,
    $sort:_id:-1,
    
       $group:
         
           _id: "$username",
           latestcomment:  $first: "$comment" 
         
     
]
db.comments.aggregate(a)

【讨论】:

【参考方案2】:

你可以试试这个..

db.foo.find().sort(_id:1).limit(100);

1 将按升序排序(从旧到新),-1 将按降序排序(从新到旧)

【讨论】:

上述查询不包括从 Elasticsearch 结果中收到的任何形式的用户名!

以上是关于Elasticsearch 和后续的 Mongodb 查询的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch JVM配置

ElasticSearch--映射和分析

深入Elasticsearch:索引的创建

深入Elasticsearch:索引的创建

深入Elasticsearch:索引的创建

深入Elasticsearch:索引的创建