问题标签 [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.
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
.
elasticsearch-dsl-py - 按字段排序
我正在对 Elasticsearch 字段进行排序,但它给了我一个错误。
我这样做:
我收到以下错误
我知道字段需要是 type 关键字,所以我的映射是这样的
我缺少什么来完成这项工作
谢谢
授予
python - 如何使用 Python elasticsearch_dsl 在分析器中包含 shingle elasticsearch 过滤器
我在 Django 应用程序中使用弹性搜索进行全文搜索。我正在使用 pypi 中的 elastic_dsl 库与集群交互。我正在尝试在分析器中实现瓦状过滤器。我相信我已经让它使用默认值:
我想更改默认值。例如,将 max_shingle_size 设置为 5 而不是默认的 2。我找不到执行此操作的语法。我已经阅读了文档、Git 存储库中的示例以及一些源代码。
django - AWS ElasticSearch Service 上的身份验证最终失败错误
我正在尝试将 Django 应用程序从使用 AWS ElasticSearch 2.3 升级到 7.4(并同时升级 Django 包)。
我让它在本地运行,但是当我尝试使用 AWS ElasticSearch7.4 运行时,我得到以下 Traceback
我正在使用django-elasticsearch-dsl
,所以我只是在其中声明了主机settings.py
(这是我之前的直接替换)
我正在使用 IAM 身份验证,并且已授予 IAM 帐户对我所有 ElasticSearch 实例的完全访问权限(但这与我在设置实例时使用的主用户和密码不同)。如果我需要这些,我该如何通过它们?如果没有,我做错了什么?
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 这样做(但也许我错了?)所以我想知道我是否应该这样做:
尝试使用姐妹django-elasticsearch-dsl-drf包通过 REST 与 Elasticsearch 交互。
通过使用更普通的 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
python - 使用python在弹性搜索中自动完成
我有索引 company_prod2,它通过以下查询返回 kibana 中的点击:
但是当我尝试使用带有以下代码的python弹性搜索dsl库进行搜索时:
我没有得到任何结果。我也尝试使用本机 python 库:
但这也给出了 0 次点击。
如果我尝试使用以下命令使用 curl:
我很高兴得到结果。我需要使用 python 库在弹性搜索中进行相同的查询。
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)?
预期输出:
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的解决方案
python - 如何使用 Elasticsearch-dsl 在 Django 中进行并行测试?
有没有人通过 Elasticsearch 在 Django 中进行并行测试?如果是这样,您能否分享实现它所需的配置更改?
我已经尝试了几乎所有我能想到的让它工作的方法,包括这里列出的解决方案。从 Django 本身如何处理并行数据库中获得灵感,我目前创建了一个自定义 newParallelTestSuite
来覆盖 init_worker 以迭代每个索引/文档类型并大致如下更改索引名称:
这似乎通常有效,但是,似乎随机发生了一些奇怪的事情(即再次运行测试套件并不能可靠地重现问题和/或错误消息发生变化)。以下是我遇到的各种错误,每次测试运行似乎都会随机失败其中一个错误:
- 尝试在上面的函数中创建索引时引发 404(我已经确认它是从 PUT 请求返回的 404,但是在 Elasticsearch 服务器日志中它说它创建的索引没有问题)
- 尝试创建索引时为 500,虽然这已经有一段时间没有发生了,所以我认为这是由其他东西修复的
- 查询响应有时在 elasticsearch 库中的函数内没有
items
字典值_process_bulk_chunk
我认为连接层发生了一些奇怪的事情(比如 Django 测试运行程序进程之间的连接以某种方式混淆了响应?)但我不知道这怎么可能,因为 Django 使用多处理以并行化测试,因此它们每个都在自己的进程中运行。分拆的进程是否有可能仍在尝试使用原始进程的连接池或其他什么?我真的不知道从这里尝试其他事情,并且非常感谢一些提示,甚至只是确认这实际上是可能的。
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]”)