问题标签 [elasticsearch-dsl-py]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1240 浏览

elasticsearch-dsl - 如何使用 elasticsearch-dsl 以 json 格式保存文档

我正在尝试更新现有的 elasticsearch 数据管道,并希望更充分地使用 elasticsearch-dsl。在当前流程中,我们将文档创建为 json 对象,然后使用请求将对象 PUT 到相关的弹性搜索索引。

我现在想使用 elasticsearch-dsl 保存方法,但是当我的对象或文档被构造为 json 时,我很难理解如何做到这一点。

当前流程:

我不想使用这种 PUT 方法,而是想利用 DSL 中可用的 Document.save 功能,但我无法为我的用例翻译 api 文档中的示例。

我已经修改了我的 ObjectsHandler 以便它可以创建对象索引:

api.init_mapping(index)当我从导入器脚本调用时,这成功创建了一个索引。

文档以这个作为保存单个文档的示例,其中 Article 相当于我的 Object 类:

我是否可以使用这种方法,但保留我预先构建的 json 对象文档,而不是指定单个属性?我还需要能够指定文档 ID 是文档唯一 ID。

我扩展了我的 ObjectsHandler 以包含一个 save_doc 方法:

这确实成功地将具有 uniqueID 的对象保存为 id,但我无法使用传递给方法的 json 对象作为document.

0 投票
1 回答
319 浏览

elasticsearch-dsl-py - 按字段排序

我正在对 Elasticsearch 字段进行排序,但它给了我一个错误。

我这样做:

我收到以下错误

我知道字段需要是 type 关键字,所以我的映射是这样的

我缺少什么来完成这项工作

谢谢

授予

0 投票
1 回答
471 浏览

python - 如何使用 Python elasticsearch_dsl 在分析器中包含 shingle elasticsearch 过滤器

我在 Django 应用程序中使用弹性搜索进行全文搜索。我正在使用 pypi 中的 elastic_dsl 库与集群交互。我正在尝试在分析器中实现瓦状过滤器。我相信我已经让它使用默认值:

我想更改默认值。例如,将 max_shingle_size 设置为 5 而不是默认的 2。我找不到执行此操作的语法。我已经阅读了文档、Git 存储库中的示例以及一些源代码。

0 投票
2 回答
3075 浏览

django - AWS ElasticSearch Service 上的身份验证最终失败错误

我正在尝试将 Django 应用程序从使用 AWS ElasticSearch 2.3 升级到 7.4(并同时升级 Django 包)。

我让它在本地运行,但是当我尝试使用 AWS ElasticSearch7.4 运行时,我得到以下 Traceback

我正在使用django-elasticsearch-dsl,所以我只是在其中声明了主机settings.py(这是我之前的直接替换)

我正在使用 IAM 身份验证,并且已授予 IAM 帐户对我所有 ElasticSearch 实例的完全访问权限(但这与我在设置实例时使用的主用户和密码不同)。如果我需要这些,我该如何通过它们?如果没有,我做错了什么?

0 投票
1 回答
1020 浏览

django - Django Celery 任务中的 Elasticsearch 索引

我正在构建一个 Django Web 应用程序来存储文档及其关联的元数据。

大部分元数据将存储在底层 MySQL 数据库中,在 Elasticsearch 中索引 OCR 的文档文本以启用全文搜索。我已经合并了django-elasticsearch-dsl来连接和同步我的数据模型,因为我还在索引(因此,双重存储)我模型中的其他一些字段。我曾考虑使用Haystack,但它缺乏对最新 Elasticsearch 版本的支持。

当通过应用程序的管理界面上传文档时,post_save 信号会自动触发Celery异步后台任务来执行 OCR,并最终将提取的文本索引到 Elasticsearch。

看到我的模型中没有定义全文字段(并希望避免这样做,因为我不想在数据库中存储或搜索 CLOB),我正在寻找更新的最佳实践我的 tasks.py 文件中的 Elasticsearch 文档。似乎没有办法使用 django-elasticseach-dsl 这样做(但也许我错了?)所以我想知道我是否应该这样做:

  1. 尝试使用姐妹django-elasticsearch-dsl-drf包通过 REST 与 Elasticsearch 交互。

  2. 通过使用更普通的 elasticsearch-dsl-py包(基于 elasticsearch-py)更松散地将我的应用程序与 Elasticsearch 集成。使用这种方法我会失去一些“奢侈”,因为我必须编写更多的集成代码,至少如果我想用信号连接我的模型。

有最佳实践吗?还是我没有考虑过的另一种方法?

更新 1: 在尝试实现来自@Nielk 的答案时,我能够将 OCR 文本(下面的 tasks.py 中的结果 =“test”)持久化到 ElasticSearch 中,但它也保留在 MySQL 数据库中。我仍然对如何将 Submission.rawtext 配置为 ElasticSearch 的通路感到困惑。

模型.py:

文件.py:

tasks.py(在提交模型 post_save 信号上调用):

更新 2(工作解决方案):

models.py 类提交(models.Model):

文件.py

任务.py

0 投票
1 回答
1748 浏览

python - 使用python在弹性搜索中自动完成

我有索引 company_prod2,它通过以下查询返回 kibana 中的点击:

但是当我尝试使用带有以下代码的python弹性搜索dsl库进行搜索时:

我没有得到任何结果。我也尝试使用本机 python 库:

但这也给出了 0 次点击。

如果我尝试使用以下命令使用 curl:

我很高兴得到结果。我需要使用 python 库在弹性搜索中进行相同的查询。

0 投票
0 回答
411 浏览

elasticsearch - Elasticsearch:将聚合查询保存到 CSV 文件中

我有如下数据:

在这里,我有多个字段,例如 user_id、user_name、working_hours、date、working_minutes。我只想选择 user_id、user_name 和 avg_hours(在为每个用户计算 avg_working_minutes 之后)。

它的返回输出如下:

这里它返回所有 user_id、user_name、working_hours、date、working_minutes。我不想要所有这些领域。那么,如何在此查询中选择多个字段(user_id、user_name 和 avg_hours)?

预期输出:

0 投票
1 回答
266 浏览

python-3.x - 包含 GeoPoint 的位置列表 - (geo_spatial_filter_fields, geo_distance)

我正在使用elasticsearch-dsl-drf,并且我只是将location文档上的单个字段转换为NestedField具有以下定义的字段:

location = fields.NestedField(properties={"point": fields.GeoPointField()})

然后在我看来我有(我添加path并更改了field值以尝试使其工作):

我想知道如何实现这一目标?我想根据每个文档的位置列表中的最近位置对所有文档进行排序。

编辑

目前正在试验(更改 elasticsearch dsl drf 以使用它):

这似乎执行但排序已关闭。

感谢您的宝贵时间,谢谢

elasticsearch-dsl-drf的解决方案

0 投票
0 回答
329 浏览

python - 如何使用 Elasticsearch-dsl 在 Django 中进行并行测试?

有没有人通过 Elasticsearch 在 Django 中进行并行测试?如果是这样,您能否分享实现它所需的配置更改?

我已经尝试了几乎所有我能想到的让它工作的方法,包括这里列出的解决方案。从 Django 本身如何处理并行数据库中获得灵感,我目前创建了一个自定义 newParallelTestSuite来覆盖 init_worker 以迭代每个索引/文档类型并大致如下更改索引名称:

这似乎通常有效,但是,似乎随机发生了一些奇怪的事情(即再次运行测试套件并不能可靠地重现问题和/或错误消息发生变化)。以下是我遇到的各种错误,每次测试运行似乎都会随机失败其中一个错误:

  • 尝试在上面的函数中创建索引时引发 404(我已经确认它是从 PUT 请求返回的 404,但是在 Elasticsearch 服务器日志中它说它创建的索引没有问题)
  • 尝试创建索引时为 500,虽然这已经有一段时间没有发生了,所以我认为这是由其他东西修复的
  • 查询响应有时在 elasticsearch 库中的函数内没有items字典值_process_bulk_chunk

我认为连接层发生了一些奇怪的事情(比如 Django 测试运行程序进程之间的连接以某种方式混淆了响应?)但我不知道这怎么可能,因为 Django 使用多处理以并行化测试,因此它们每个都在自己的进程中运行。分拆的进程是否有可能仍在尝试使用原始进程的连接池或其他什么?我真的不知道从这里尝试其他事情,并且非常感谢一些提示,甚至只是确认这实际上是可能的。

0 投票
2 回答
2872 浏览

python-3.x - 无法解析 ID 为“DEMO_54ddab6”的文档中类型为 [date] 的字段 [review_start_datetime]

索引映射

班级

创建数据

在执行 save 方法时,它仅针对review_start_datetime字段而不是review_start_time给出以下错误。

elasticsearch.exceptions.RequestError:RequestError(400,'mapper_parsing_exception',“无法解析ID为'DEMO_54ddab6'的文档中类型[日期]的字段[review_start_datetime]”)