gpt4 book ai didi

database - ElasticSearch-唯一约束的解决方法

转载 作者:行者123 更新时间:2023-12-03 01:07:45 27 4
gpt4 key购买 nike

我正在考虑ElasticSearch中“没有唯一约束”的问题的一些聪明的解决方法。
我不能使用_id存储我的唯一字段,因为我将_id用于其他目的。

我搜寻Internet页面并将其存储在ElasticSearch索引中。我的规则是,该URL必须是唯一的(索引中只有一个文档具有给定的URL),以使ElasticSearch不允许在一个字段上设置唯一约束,因此我必须在插入新页面之前查询索引,以检查是否已经存在带有给定的URL。

因此,向文档添加新页面如下所示:

  • 在ES中查询(匹配)索引以检查是否存在具有给定url字段的文档。
  • 如果没有,我插入新文档。

  • 该解决方案有两个缺点:
  • 我必须执行额外的查询以检查是否已经存在具有给定URL的文档。这会减慢插入过程并产生额外的负载。
  • 如果我尝试在短时间内添加两个具有相同url的文档,并且在添加第二个文档之前索引没有刷新,则第二个查询返回,即没有给定url的文档,最后我有两个带有url的文档相同的URL

  • 所以我在寻找其他东西。请告诉我您是否有任何想法,或者告诉我您对此类解决方案的看法:

    解决方案1
    要使用其他数据库系统(或可能带有 _id中带有url的另一个ES索引),我将仅存储url,然后查询它以检查是否已存在url。

    解决方案2
    2.在插入之前将文档排入队列,并在其他进程将处理队列并将排队的文档添加到索引时禁用索引刷新。

    最佳答案

    与其他NoSQL解决方案相比,您遇到了Elasticsearch不能很好完成的事情之一(二级索引和约束)。除了解决方案1和解决方案2外,建议您查看Elasticsearch Rivers:

    Rivers

    A river is a pluggable service running within elasticsearch cluster pulling data (or being pushed with data) that is then indexed into the cluster.



    例如,您可以使用MongoDB河,然后将数据插入MongoDB。 MongoDB支持二级唯一索引,因此您可以防止插入重复的URL。然后,River将负责将数据实时推送到Elasticsearch。

    https://github.com/richardwilly98/elasticsearch-river-mongodb

    ES正式支持CouchDB,并且还有许多其他数据库也有河流-

    关于database - ElasticSearch-唯一约束的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24919363/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com