【问题标题】:ElasticSearch: Selective queryElasticSearch:选择性查询
【发布时间】:2012-12-10 19:43:25
【问题描述】:

需要一些帮助。 我的文档有一个版本字段。只有更新的文档才会有带有递增版本号的新记录。

例子:

{id:1 , version:1,…} 
{id:1 , version:2,….} //This has been updated
{id:2 , version:1,…} 

在上面的示例中,id=1 有两条记录,因为它已被更新。虽然 id=2 有一条记录,因为它尚未更新并且仍处于版本 1 上。

现在在弹性搜索中是否有任何查询可以获得最大版本。 示例:获取唯一文档 TILL 版本 1 应该给出结果:

{id:1 , version:1,…}
{id:2 , version:1,…}

虽然在版本 2 之前获取唯一文档应该给出:

{id:1 , version:2,….}
{id:2 , version:1,…}

(在上面的结果中有版本 1 和版本 2 的混合)

谢谢, 卡兰

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    在 elasticsearch 中没有简单的方法来实现这一点(至少在实现 Field Collapsing/Combining 之类的东西之前)。我建议维护两个索引:一个用于具有自动生成的 ID 的所有版本,另一个索引仅包含最新版本,记录的 id 字段作为 ID。当你需要所有版本时,你可以搜索第一个索引,当你只需要最新版本时,你可以搜索第二个。

    另一种解决方案是以某种方式指示记录代表最新版本。这可以通过添加一个布尔字段“latest”来完成,这意味着当添加新记录时,您必须使用以前的最新版本重新索引记录,或者您可以添加一个子文档来跟踪每条记录的最新版本.

    【讨论】:

    • 嗨,Imotov,非常感谢您的回复。
    • 您好 Imotov,非常感谢您的回复。我正在尝试在我的 Mongo 数据库中实现版本控制。我也在努力避免数据重复。因此,只有更新的文档才会有新版本。在我上面的示例中,id=1 有两条记录(版本 1 和版本 2),因为它已被更新。虽然 id=2 仍然在版本 1 上,因为它从未更新过。我已经通过 mongo-driver 完成了这个处理,然后使用了 elasticsearch-mongo-river。现在我的问题是我需要有选择地提取一个版本。同样,如果文档在版本 2 中没有更新,那么我应该得到它的版本 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 2014-04-09
    • 2019-09-06
    相关资源
    最近更新 更多