问题标签 [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-py 使 Elasticsearch 索引保持最新?
我开发了一个小型个人信息目录,我的客户可以通过 Django 管理界面访问和更新该目录。该信息需要可搜索,因此我设置了我的 Django 站点以将该数据保存在搜索索引中。我最初使用 Haystack 和 Whoosh 作为搜索索引,但最近我不得不放弃这些工具,转而使用 Elasticsearch 5。
以前,每当更新目录中的任何内容时,代码都会简单地清除整个搜索索引并从头开始重建它。这个目录中只有几百个条目,所以这并不是非常糟糕的。不幸的是,尝试在 Elasticsearch 中做同样的事情是非常不可靠的,因为我认为我的代码中存在某种竞争条件。
这是我编写的使用 elasticsearch-py 和 elasticsearch-dsl-py 的代码:
我已经设置了 Django 信号,以便在保存refresh_index()
时调用。Department
但是refresh_index()
由于此错误而经常崩溃:
elasticsearch.exceptions.RequestError: TransportError(400, u'index_already_exists_exception', u'index [departmental_directory/uOQdBukEQBWvMZk83eByug] already exists')
这就是我添加该time.sleep(3)
调用的原因。DepartmentIndex.init()
我假设在调用时索引尚未完全删除,这导致了错误。
我的猜测是,我只是以完全错误的方式处理这件事。必须有一种更好的方法来使用 elasticsearch-dsl-py 使弹性搜索索引保持最新,但我只是不知道它是什么,而且我无法通过他们的文档弄清楚。
在谷歌上搜索“从头开始重建弹性搜索索引”会给出“如何重新索引你的弹性搜索数据”的大量结果,但这不是我想要的。我需要用我的应用程序数据库中的新数据替换数据。
python - 使用 elasticsearch-dsl python 客户端求和计算
我有一个名为“demoadmin”的 Eleaticsearch 索引,类型为“billing”。我已经使用 POST 成功执行了以下查询正文。
此查询返回如下输出
查询和输出在 Elasticsearch-head 中如下所示
当我尝试使用 elasticsearch python API 将此代码转换为 python 时,代码如下所示,它返回相同的输出。
我正在尝试在 elasticsearch-dsl 中转换代码并卡住了。我已经完成了应用过滤器,但之后对要做什么感到困惑。到目前为止,我已经在 elasticsearch-dsl 中实现了代码,如下所示
不知道如何从这里开始。一些机构可以在聚合部分帮助我吗?
python - 使用 elasticsearch-dsl-py 索引和过滤文档
我正在为一个检索信息研讨会进行调查。我有一个json
包含文章列表的文件,我需要对它们进行索引,然后使用带有突出显示的过滤器。
在终端中执行此操作的步骤列表如下:
1. 创建一个带有渗透的地图。
索引一篇新文章:
渗透文档:
到目前为止我有这个代码:
更新: 谢谢你的回答,我现在有这个:
它工作正常,但我现在有两个目标:
- 在对dict中的随机数项目进行索引后,我遇到了下一个错误:
我知道我可以使用以下命令解决此问题:curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
更新 最后我解决了删除数据文件夹的问题。
但现在我在索引中进行搜索,但我什么也没得到:
这是我的尝试curl
:
我得到可变的统计数据,但没有结果:
谁能帮我?
django - 在 elasticsearch-dsl-py 中进行索引时,嵌套字段会出现 TypeError
每当我尝试保存具有嵌套字段的对象时,我都会收到类型错误。
TypeError: isinstance() arg 2 must be a type or tuple of types
我有以下文档类:
我的行业模型是一个 django 模型(我使用过 mongoDB,所以它本身就是一个动态文档),它被定义为
现在,每当我运行 bulk_indexing 模块时,都会出现问题:
为什么会出现这个错误?当我删除嵌套的更新文件时,它一切正常,尽管创建字段是相同的。这里有什么问题?
python - elasticsearch dsl扫描结果
_source
有人可以指出我在 elasticsearch dsl python 客户端中使用扫描 API 时如何从生成器中提取结果吗?
例如,我正在使用(来自这个例子,elasticsearch-dsl scan)
我得到以下
如何从命中生成器中提取字典?
python - 使用 elasticsearch_dsl 在字段中搜索多个字符串
我正在寻找用于elasticsearch_dsl
在单个字段上查询多个字符串的方法。
当我尝试使用通配符选项时,它只列出找到的最后一个字符串
例如,我需要在名为的字段中查找以下字符串cars_model
所以我正在形成的查询是
在这里,它只返回“honda_crv”的列表,我假设这是最后一个数据。
在做了一些研究后,我尝试使用以下选项
甚至尝试过multi_match
仍然给我找到最后一个查询的选项。
从逻辑上讲,它应该列出与“honda*”匹配的所有车型
任何帮助表示赞赏。
elasticsearch - 用于分页聚合的 Elasticsearch From 和 Size
首先,我想说我想要达到的要求在 SOLR 5.3.1 上运行良好,但在 AWS 上的 ElasticSearch 6.2 上运行良好。
我的实际查询非常大且复杂,它在 kibana 上运行良好,但当我越过from = 100和size = 50时却不行,因为它在 kibana 控制台上显示错误,
我知道的:
对于普通搜索,最大from可以是10000,对于聚合搜索,最大from可以是100
如果我超过了这个限制,那么我必须更改最大限制,这是不可能的,因为我在 AWS 上使用 ES 作为服务,或者我使用具有滚动 ID 功能的滚动API 来获取分页数据。
Scroll API 工作正常,因为我已经将它用于项目的另一部分,但是当我尝试使用聚合的相同 Scroll 时,它没有按预期工作。
这里使用 Scroll API,第一次搜索获取聚合数据,但第二次使用滚动 id 调用不返回聚合结果,仅显示Hits结果
Kibana 上的查询
在 python 上搜索:我在此搜索中面临的问题是,第一次搜索获取聚合数据以及命中数据,但对于下一次使用滚动 ID 调用,它不会返回仅显示命中数据的聚合数据。
在 python 上使用 Elasticsearch-DSL:使用这种方法,我正在努力选择第二个 aggs ig tops->top_hits 之类的_source
字段名称id
feed_provider_id
所以我的问题是
对于 from=100 以上的聚合查询,是否无法使用from和size字段获取数据?
如果可能的话,请用普通的elasticsearch方式或elasticsearch-dsl python方式给我一个提示,因为我对elasticsearch-dsl和elasticsearch bucket,matric等并不熟悉。
关于 SO 的一些答案告诉使用分区,但我不知道如何在我的场景中使用它如何使用 From / Size 控制弹性搜索聚合结果?
其他一些人说 ES 当前不支持此功能(目前在功能请求中)。如果这不可能,还有什么可以代替 Solr 中的分组?
python - 如何在 n 元素中搜索 elastic-search-dsl
我在弹性搜索中遇到了一个问题,无法知道一个元素是否已经存在,因为出于许多实际原因,我为每个用户(作者)存储在弹性搜索图像的元数据中,为了避免一些攻击,我需要确定图像尚未保存。这是一个标准的 json 文件:
我的问题是我可以有数千张图像,所以如果我已经通过查看校验和注册了这个图像,我可以用查询进行测试吗?
elasticsearch - 如何使用 Python 的 elasticsearch_dsl 搜索对脚本字段求和?
这对我来说是正确的:
现在我想special
在所有点击中附加一个总和。我试过这个:
但是当我检查aggs
响应的属性时,我得到
响应本身告诉我special
每个条目都正确填充,并且始终是肯定的。在我看来special
,在总和发生时它可能不存在,因此 elasticsearch 看不到它,因此它产生0
. 我尝试了pipeline
代替,metric
但这并没有改变事情。我提议的应该是可能的,对吧?
我可以在我的脚本中计算总和,而不是通过 elasticsearch,但我打赌 ES 端的总和会快得多。
更新
基于弹性搜索论坛上的讨论,我认为我找到了它应该工作的方式,但它仍然不能正常工作。您在聚合中提供脚本,如下所示:
现在的问题是输出不正确。在具有给定时间的一项的测试索引上,我尝试在总和聚合中报告该字段,而不是预期的结果(字段的值),我得到的结果与 128 不同。
更新
我在弹性搜索帮助论坛中收到了最后一个问题的答案:https ://discuss.elastic.co/t/script-aggregation-yields-wrong-but-close-answer/133744/3?u=rschwieb
简而言之,存储在字段中的数据被弹性搜索解释为双精度,但聚合使用由索引映射确定的类型(改为“浮动”)。将字段重新索引为双精度后,数字与预期一致。
elasticsearch - 使用python elasticsearch-dsl的elasticsearch字段名称中的多个下划线
我试图理解为什么带有单个下划线的字段的mods_genre
行为与带有 1+ 下划线的字段的行为不同,例如mods__genre
在使用 python elasticsearch-dsl client时。
使用 ElasticSearch 版本5.5.1
和 python 3.5
。
以下是我正在使用的代码,用于选择字段与值匹配的所有文档。
此示例正在搜索索引,foo
其字段名称只有一个下划线,并按预期返回结果(我已经确认该字段填充了该值):
但是,使用非常相似的代码,但查询具有连续多个下划线的字段名称的索引,bar
我得到零结果:
对为什么会出现这种情况有任何见解吗?我知道以下划线开头的字段名称是保留的,但没有偶然发现任何指示字段内下划线的文档 -特别是连续多个下划线- 会有问题。