gpt4 book ai didi

elasticsearch - 根据 Elasticsearch 中文档的键按优先级过滤

转载 作者:行者123 更新时间:2023-12-02 23:50:28 26 4
gpt4 key购买 nike

我有一个很大的 ES 索引,我打算使用各种来源填充它。源有时具有相同的文档,这意味着我将有重复的文档,仅由“源”参数不同。

要在提供搜索时执行重复数据删除,我看到了两种方法:

  • 让 Elasticsearch 执行优先级过滤。
  • 通过 Python 获取所有内容并过滤

  • 我不想在 Python 级别过滤以保留分页,所以我想问是否有办法告诉 Elasticsearch 根据文档中的某些值(在我的例子中是源)进行优先过滤。

    我想按简单优先级进行过滤(因此,如果我的订单是 A、B、C,我将提供 A 文档(如果存在),然后提供 B(如果来自源 A 的文档不存在,然后是 C)。

    一组重复文档的示例如下所示:
    {
    "id": 1,
    "source": "A",
    "rest_of": "data",
    ...
    },
    {
    "id": 1,
    "source": "B",
    "rest_of": "data",
    ...
    },
    {
    "id": 1,
    "source": "C",
    "rest_of": "data",
    ...
    }

    但是,如果我想先服务“A”,如果没有“A”,则为“B”,如果没有“B”,则为“C”,“id”的搜索结果:1 将如下所示:
    {
    "id": 1,
    "source": "A",
    "rest_of": "data",
    ...
    }

    笔记:
    或者,我可以尝试在填充阶段进行重复数据删除,但我担心性能。如果没有实现解决方案 1 的简单方法,愿意探索这一点。

    最佳答案

    我认为最好的解决方案是实际上避免在索引中出现重复项。我不知道它在您的数据中的频率有多高,但如果您有很多,这将严重影响术语频率并可能导致搜索相关性较差。

    一种非常简单的方法是生成文档的 ElasticSearch ID,并在所有来源中使用一致的方法。您确实可以强制 _id索引时而不是让 ES 为您生成它。

    然后会发生什么,如果存在的话,最后一个源将覆盖现有的源。最后来的获胜。如果你不关心 source ,这可能有效。

    但是,这会带来一点性能成本,如 stated in this article :

    As you have seen in this blog post, it is possible to prevent duplicates in Elasticsearch by specifying a document identifier externally prior to indexing data into Elasticsearch. The type and structure of the identifier can have a significant impact on indexing performance. This will however vary from use case to use case so it is recommended to benchmark to identify what is optimal for you and your particular scenario.

    关于elasticsearch - 根据 Elasticsearch 中文档的键按优先级过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58076973/

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