使用批量/更新方法将“标签”应用于数百万个文档

2024-04-07

我们的 ElasticSearch 实例中有大约 55,000,000 个文档。我们有一个带有 user_ids 的 CSV 文件,最大的 CSV 有 9M 个条目。我们的文档以 user_id 作为键,所以这很方便。

我发布这个问题是因为我想讨论并拥有完成此任务的最佳选择,因为解决此问题有不同的方法。如果用户文档还没有新的“标签”,我们需要将新的“标签”添加到文档中,例如用“stackoverflow”或“github”标记用户。

  1. 那里有经典partial update http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/partial-updates.html端点。这听起来很慢,因为我们需要迭代超过 9M 的 user_ids 并为每个用户发出 api 调用。
  2. bulk request http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html,它提供了一些更好的性能,但一次调用中可以提及的文档数量有限。知道批量何时太大就可以知道我们需要如何随时随地学习。
  3. 然后是官方开放问题 https://github.com/elasticsearch/elasticsearch/issues/2230 for /update_by_query端点有大量流量,但没有确认它已在标准版本中实现。
  4. 在这个开放问题上,提到了update_by_query 插件 https://github.com/yakaz/elasticsearch-action-updatebyquery/这应该提供一些更好的处理,但是存在用户抱怨性能问题和内存问题的老问题和未解决的问题。
  5. 我不确定它在 EL 上是否可行,但我想我会将所有 CSV 条目加载到一个单独的索引中,并以某种方式加入两个索引并应用脚本,该脚本将添加标签(如果尚不存在)。

因此,问题仍然是做到这一点的最佳方法是什么,如果你们中的一些人过去这样做过,请确保分享您的数字/表现以及这次您将如何采取不同的做法。


在等待查询支持更新时,我选择了:

  1. Use the 扫描/滚动API http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/scan-scroll.html循环遍历您想要标记的文档 ID(相关答案 https://stackoverflow.com/questions/25496458/how-to-retrieve-all-the-document-ids-from-an-elasticsearch-index/25502275#25502275).

  2. Use the bulk API http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html去表演部分更新 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/partial-updates.html在每个匹配的文档上设置标签。

此外,我将标签数据(您的 CSV)存储在单独的文档类型中,并从中查询并在创建时标记所有新文档,即不必先索引然后更新。

用于说明该方法的 Python 片段:

def actiongen():
    docs = helpers.scan(es, query=myquery, index=myindex, fields=['_id'])
    for doc in docs:
        yield {
            '_op_type': 'update',
            '_index': doc['_index'],
            '_type': doc['_type'],
            '_id': doc['_id'],
            'doc': {'tags': tags},
        }

helpers.bulk(es, actiongen(), index=args.index, stats_only=True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用批量/更新方法将“标签”应用于数百万个文档 的相关文章

  • 使用elasticsearch按一天中的时间累积流量

    我正在接收来自大量客户端应用程序的请求 事件 我想使用elasticsearch 来找出我的最高流量点是什么时候 我尝试过的一件事是使用嵌套直方图进行过滤器聚合 然后使用嵌套的 术语 聚合 通过脚本字段获取一天中的不同时间 以下是我的尝试
  • Spark任务仅在一个执行器上运行

    大家好 首先我知道这个线程的存在 Spark 中的任务仅在一个执行器上运行 https stackoverflow com questions 53425983 task is running on only one executor in
  • 如何在 Elasticsearch 中同时按父字段和嵌套字段排序?

    我需要同时按父字段和嵌套字段在 Elasticsearch 中排序 我的数据是这样的 id 1 rank 8 price 12 45 offers id 777 rank 12 price 45 75 id 2 rank 35 price
  • 向 ElasticSearch 术语聚合添加其他字段

    索引文档如下 id 1 title Blah platform id 84 url http facebook com title Facebook 我想要的是按平台计数和输出统计数据 为了计数 我可以使用术语聚合platform id作为
  • 在 bash 中使用正则表达式从字符串中提取信息

    我在 bash 中有一个字符串变量 如下所示 SOGoTimeFormat H M SOGoMailShowSubscribedFoldersOnly 0 SOGoMailSignaturePlacement below SOGoLangu
  • Elasticsearch 对字符串排序未返回预期结果

    当对包含多个单词的字符串字段进行排序时 Elasticsearch 会拆分字符串值并使用最小值或最大值作为排序值 即 当对值为 老虎之眼 的字段进行升序排序时 排序值为 Eye 当按降序排序时 排序值为 Tiger 假设我的索引中有 老虎之
  • Google 自定义搜索引擎未给出预期的搜索结果

    我一直在尝试创建一个新的谷歌自定义搜索引擎 但是当我尝试一些查询时 搜索引擎没有给我预期的搜索 结果 在某些查询上它工作正常 但在其他查询上 它说 没有结果 我尝试添加我想要搜索的网站的 URL 但是当我尝试搜索该页面的关键字时 某些页面和
  • 如何在弹性搜索(aws)中存储日期范围数据并搜索范围?

    我正在尝试在弹性搜索中存储酒店房间可用性 然后我需要 搜索从某个日期到另一个日期可用的房间 我想出了 存储数据以确保可用性的两种方式 如下 这里可用性字典存储了所有日期 每个日期键的值是 true 或 false 代表其可用 那天与否 id
  • 从 Visual Studio 搜索中排除特定文件

    是否可以从 Visual Studio 中的搜索中排除某些文件 例如 jquery js 几乎总是污染我的搜索结果 一半结果来自该文件 我知道您可以将特定类型列入白名单 但是当我想在 js 扩展名中搜索时 有解决方案吗 在这里投票功能 ht
  • 为什么使用 Dijkstra 算法而不是最佳(最便宜)优先搜索?

    从我到目前为止所读到的来看 这最佳优先搜索 https en wikipedia org wiki Best first search在找到到达目标的最短路径方面似乎更快 因为 Dijkstra 算法在遍历图时必须放松所有节点 是什么让 D
  • 如何搜索包含表情符号的文本?

    我们有一个 MySQL InnoDB 表 带有一个文本字段COLLATE utf8mb4 unicode ci 我需要搜索包含任何表情符号字符的行 我搜索了相当多的问题 但人们似乎有一个他们正在搜索的表情符号列表 我实际上正在寻找一种可以找
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 了解elasticsearch如何在内部存储日期

    我想了解 ES 如何在其索引内部存储日期值 它会转换为 UTC 吗 我有一个日期类型的字段 t 这是映射 t type date 现在 当我向 ES 插入 添加文档时 它如何存储在索引中 t 1427700477165 从 Date now
  • 按字段关联 ELK 中的消息

    相关 在ELK中合并日志和查询 https stackoverflow com questions 28429607 combine logs and query in elk 我们正在设置 ELK 并希望在 Kibana 4 中创建可视化
  • SOLR - 过滤器查询中的正则表达式

    我想在 fq 中实现 Regex 但以前从未实现过 我的属性中有以下值 字段类型为 小写 Prop company1 city1 state1 country1 高级分析化学家 芝加哥 我想根据正则表达式过滤结果 正则表达式应该与上面的内容
  • 如何提高elasticsearch中的索引类型?

    我以前是这样搜索的 curl XGET localhost 9200 users search 但 users 包含用户 a b c 如下所示 curl XGET localhost 9200 users a b c search user
  • 如何使用elasticsearch进行分页?来自 vs 滚动 API

    我使用elasticsearch作为数据库来存储大量日志数据 我知道有两种方法可以进行分页 使用大小并来自 API 使用滚动API 现在我使用 from 进行分页 从前端和后端获取页面和大小参数 Java searchSourceBuild
  • 弹性搜索模糊匹配,精确匹配首先显示

    我想在查询中使用模糊匹配 但精确匹配显示在结果的顶部 我已经尝试过以下方法 return this gt client gt search array index gt self INDEX type gt self TYPE body g
  • 如何将2个匹配查询加入到elasticsearch的查询中?

    我想查询以下数据user id is 1 and name is John 写一个常用的SQL很容易 select from t where user id 1 and name John 但对我来说进行elasticsearch的查询并不
  • 局部敏感哈希 - Elasticsearch

    有没有允许在 Elasticsearch 上使用 LSH 的插件 如果是的话 您能否指出该位置并告诉我如何使用它 谢谢 编辑 我发现ES使用了MinHash插件 我怎样才能用这个来比较文件呢 查找重复项的最佳设置是什么 有一个Elastic

随机推荐

  • 如何在 flutter 上创建带有圆角的方形头像?

    我想创建一个类似于 CircleAvatar 的小部件 但不是圆形的 这是圆形头像 这就是我想要创建的头像 我想知道是否有一个默认的小部件可以执行此操作 例如用于圆形头像的 CircleAvatar 有很多方法可以实现它 但我只会使用一种
  • 如何使用 NodeJS 客户端库使用 JWT 访问 Google Directory (Admin SDK)?

    我正在尝试创建一个服务器应用程序 将用户添加 删除到我的域的组中 请注意 它不会与用户进行任何交互 它是服务器到服务器的应用程序 我在 Google API 控制台中注册了我的应用程序 下载了密钥并通过发出将其转换为 pem openssl
  • 如何将持久计数器重置为特定值?

    我之前问过一个问题 如何防止该计数器重置为 100 000 https stackoverflow com questions 5250118 how to keep this counter from reseting at 100 00
  • sqlalchemy.exc.OperationalError:(sqlite3.OperationalError)尝试创建数据库时无法打开数据库文件错误[重复]

    这个问题在这里已经有答案了 我正在 AWS 上的 Ubuntu 18 04 Lightsail 实例中工作 当我在 python3 中运行以下代码时 出现以下错误 该脚本中的每一行都运行良好 除了最后一行Base metadata crea
  • 如何在 d3 力定向图中将链接渲染为弯头连接器

    我对 D3 很陌生 这就是我到目前为止所做的here http jsfiddle net gj2y87z8 13 实际的代码在这里 var width 1840 height 1480 constant 100 color BCD8CD v
  • 在 for 循环的开头组合数组 (Bash)

    可以做这样的事情吗 a 1 2 3 b 4 5 6 for num in a b or for num in a b do echo num done Outputs 1 2 3 4 5 6 我知道你可以先将它们组合起来 然后循环它们 但是
  • 优化截击

    我在android中使用Volley库 我在浏览器中运行相同的url 它在不到一秒的时间内返回 我想知道 如何优化Volley 不清楚 Cache Queue Take 代表什么以及为什么它是 3 6 秒 或者为什么添加缓存队列获取和网络完
  • 使用 iTExtsharp 将表格添加到现有 PDF 中

    我有一个 PDF 其中有一个表格是动态的 我想在现有 PDF 中动态地将下面的另一个表格添加到该表格中 有什么方法可以在现有 PDF 中的特定位置添加表格 现有表格 不在文档末尾 已完成 然后我想添加我的表格 我该如何添加 请给我推荐一些好
  • Nginx WordPress

    我目前正在尝试让我的 Nginx Mysql Wordpress 在 Fedora 18 x64 上工作 做了以下手册http www howtoing com install wordpress using lamp or lemp on
  • 对城市的区域名称进行地理编码以获取纬度和经度

    我有我所在城市的区域名称列表 我需要相同的纬度和经度 我可以使用任何服务来获取数据吗 我不想使用任何地图 我想进行简单的 api 调用并通过 json 或 xml 获取经纬度 虽然问题已经得到解答 但我想补充一点 谷歌并不是唯一提供地理编码
  • 搜索 django 中表中的所有字段

    如何使用过滤子句在django中搜索表中的所有字段 ex table object filter 表中的任何字段 sumthing Thanks 我同意阿拉斯代尔的观点 但你问题的答案是这样的 from django db models i
  • react-native-google-places-autocomplete 给它一个值,而不仅仅是默认(初始)值

    我有一个工作
  • 在eclipse中播放ogg文件

    所以我试图在我的乒乓球游戏中添加声音 但由于某种原因我似乎无法播放声音 没有错误消息 这意味着路径是正确的 但声音根本不正确玩 以下是我的背景音乐代码 把pong的东西都删掉了 先谢谢了 import java applet Applet
  • Maui-blazor 渐变闪屏

    是否可以设置渐变启动画面 在例子中 https learn microsoft com en us dotnet maui user interface images splashscreen tabs android
  • Misra 2012 不允许在不同指针之间进行转换的基本原理

    我目前正在开发一个项目 该项目要求代码符合 Misra 2012 标准 在整个项目中 我们有很多必需的 Misra 警告 告诉我们无法将指向一种类型的指针转 换为指向另一种类型的指针 事情很简单void memcpy void to con
  • GET/POST 参数数量超出设置。DATA_UPLOAD_MAX_NUMBER_FIELDS

    我收到错误 GET POST 参数的数量超出了设置 DATA UPLOAD MAX NUMBER FIELDS 错误表明 TooManyFieldsSent 在 api upload 我在我的views py def upload requ
  • 如何使用 vaadin 网格导出到 csv/excel?

    在 Vaadin 14 中 我正在创建网格 并希望用户有一种稳定 简单的方法将网格内容导出到 csv 或最好是 Excel 为此 我很惊讶 Vaadin 似乎没有提供此功能 因此必须使用第 3 方开发人员插件 例如https vaadin
  • 三个点应该怎么写?

    简单的问题 我想设置一个 TextView 其中我想要三个点 省略号 喜欢 Read more 到字符串中 这三个点应该怎么写呢 在字符串文字中写入 u2026 看http www fileformat info info unicode
  • Google Maps API v3 - 为什么没有事件上下文?

    第一次使用 Google Maps API v3 我得到了一张带有一堆标记的地图 我想做到这一点 以便当您单击其中一个时 将显示一个特定的信息窗口 特定于您单击的标记 我真的很惊讶点击事件没有告诉您被点击的实际标记 我知道有一个解决方案使用
  • 使用批量/更新方法将“标签”应用于数百万个文档

    我们的 ElasticSearch 实例中有大约 55 000 000 个文档 我们有一个带有 user ids 的 CSV 文件 最大的 CSV 有 9M 个条目 我们的文档以 user id 作为键 所以这很方便 我发布这个问题是因为我