问题标签 [elasticsearch-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.
python - 当类型不存在时 Python elasticsearch 客户端返回 true
我正在尝试删除类型的映射,但在此之前,我正在检查该类型是否存在,如下面的代码所示:
检查类型是否存在的行返回 true,即使对于不存在的类型也是如此。因此,在尝试删除类型的映射时,我在下一行得到了 TypeMissingException。
当我们在 ipython 控制台上运行代码时,一切看起来都很好,但当代码作为异步任务的一部分运行时,就会出现问题。这不会每次都发生,而是在 QA 和生产服务器上随机发生。这两个环境是我们唯一有两个用于弹性搜索的节点的环境,我们在其他环境中看不到问题。
我正在使用 Python 2.7、elasticsearch-py 0.4.4 和 elasticsearch 版本 1.0.1,在 64 位 Linux 上具有两个节点。该代码作为定期 celery 任务运行。
编辑:为问题添加了更多细节。
python - 获取 elasticsearch-py 的解析错误
我正在尝试在我的整个弹性搜索数据中搜索某个时间范围内的某个单词“tsbu”。当我尝试运行它时,我得到一个 SearchParseException 和 Parse Failure。
我得到的完整错误是:
python - python elasticsearch客户端在创建索引期间设置映射
我可以设置在 curl 命令中创建的索引的映射,如下所示:
但是我需要在 python 中使用 elasticsearch 客户端创建该索引并设置映射.. 有什么办法?我在下面尝试了一些东西但没有用:
python - 使用 Bulk-API 使用 Elasticsearch-py 将时间戳添加到 ElasticSearch
我正在尝试为我的数据添加时间戳,让 elasticsearch-py 对其进行批量索引,然后使用 kibana 显示数据。
我的数据显示在 kibana 中,但没有使用我的时间戳。当我在配置我的索引模式后转到“发现”选项卡时,我得到 0 个结果(是的,我尝试调整搜索时间)。
这是我的批量索引 json 的样子:
这将被 elasticsearch 接受并被导入 Kibana,但 _timestamp 字段实际上不会被索引(在“时间字段名称”下配置索引模式时,它确实显示在下拉列表中)。
我还尝试像这样格式化元字段:
这也行不通。
最后,我尝试在索引中包含 _timestamp 字段并应用格式,但我在使用 elasticsearch 时遇到错误。
错误是:
任何人可以提供的帮助将不胜感激。如果我没有很好地解释这个问题,我深表歉意。如果我需要澄清更多,请告诉我。谢谢。
python - Elasticsearch analyze() 与 Python 中的 Spark 不兼容?
我正在使用 Python 3 在 PySpark 中使用 elasticsearch-py 客户端,并且在使用 ES 和 RDD 的 analyze() 函数时遇到了问题。特别是,我的 RDD 中的每条记录都是一个文本字符串,我正在尝试分析它以获取令牌信息,但是在 Spark 中的 map 函数中尝试使用它时出现错误。
例如,这工作得很好:
但是,当我尝试这个时:
我收到一条与酸洗相关的非常长的错误消息(到此结束):
我不确定错误是什么意思。难道我做错了什么?有没有办法将 ES 分析函数映射到 RDD 的记录上?
编辑:从 elasticsearch-py 应用其他函数时,我也遇到了这种行为(例如,es.termvector())。
elasticsearch - Spark 机器学习和 Elasticsearch 在 Python 中分析了标记/文本
我正在尝试构建一个应用程序来索引 Elasticsearch 中的一堆文档,并通过布尔查询将文档检索到 Spark 中以进行机器学习。我正在尝试通过 Python 通过 pySpark 和 elasticsearch-py 来完成这一切。
对于机器学习部分,我需要使用每个文本文档中的标记来创建特征。为此,我需要处理/分析每个文档的典型内容,例如小写、词干、删除停用词等。
所以基本上我需要"Quickly the brown fox is getting away."
变成类似"quick brown fox get away"
or的东西["quick", "brown", "fox", "get", "away"]
。我知道您可以通过各种 Python 包和函数轻松地做到这一点,但我想使用 Elasticsearch 分析器来做到这一点。此外,我需要以对大数据集有效的方式进行操作。
基本上,我想直接从 Elasticsearch 中提取文本的分析版本或分析的标记,并在 Spark 框架中以有效的方式进行。作为相对的 ES 新手,我想出了如何通过调整 elasticsearch-hadoop 插件直接从 Spark 查询文档:
http://blog.qbox.io/elasticsearch-in-apache-spark-python
基本上是这样的:
此代码将或多或少地从 ES 检索文本的未分析原始存储版本。我还没有弄清楚如何以有效的方式查询分析的文本/标记。到目前为止,我已经想出了两种可能的方法:
- 将 elasticsearch-py 提供的 es.termvector() 函数映射到 RDD 的每条记录上,以检索分析的令牌。
- 将elasticsearch-py提供的es.indices.analyze()函数映射到RDD的每条记录上,对每条记录进行分析。
请参阅相关:Elasticsearch analyze() not compatible with Spark in Python?
据我了解,这两种方法对于大型数据集来说效率都非常低,因为它们涉及到对 RDD 中的每条记录的 ES 的 REST 调用。
因此,我的问题是
- 是否有另一种有效的方法可以从 ES 中提取分析的文本/标记,而无需为每条记录进行 REST 调用?也许是 ES 设置将分析的文本与原始文本一起存储在字段中?或者能够在查询本身中请求分析的令牌/文本,以便我可以将其包含在 elasticsearch-hadoop 配置中。
- 对于我的问题,是否有替代或更好的解决方案可以利用 Spark 的并行机器学习功能和类似 ES 的查询/存储/分析功能?
python - 分析器中的 Elasticsearch Python 表情符号和术语偏移
我正在将 Elasticsearch 与 Python 客户端一起使用,我对 unicode、ES、分析器和表情符号之间的交互有疑问。当我尝试通过 ES 分析器运行包含表情符号字符的 unicode 文本字符串时,它似乎搞砸了结果输出中的术语偏移量。
例如:
这给了我术语测试的错误偏移量。
如果我用另一个 unicode 外来字符(例如日元符号)来做,我不会得到同样的错误。
谁能解释发生了什么?
elasticsearch - elasticsearch-py 驱动程序在聚合时未正确过滤数据
我在弹性搜索 python 驱动程序中遇到了一个奇怪的问题,想知道是否有人可以向我解释!下面的代码可以直接使用,cURL
但不能使用python-requests
or elasticsearch-py
,奇怪的是,当我切换到pyelasticsearch
库时它可以工作!详情如下:
我有一个名为的类型MY_TYPE
,它有一个嵌套对象MY_NESTED_FIELD
和一个子文档MY_CHILD_TYPE
。我正在尝试根据应用于MY_TYPE
andMY_CHILD_TYPE
类型的过滤器对嵌套属性进行术语方面聚合。查询看起来像
cURL
当我直接(使用或插件)对 elasticsearch 运行此查询时,head
它会过滤父级并根据正确的结果返回聚合。但是,当我从 python 脚本中尝试它时,它运行成功但返回错误数据(它从所有文档返回构面而不应用过滤器)
我努力了:
- 卷曲:工作!
- ElasticSearch 的 HEAD 插件:有效!
- python-requests 2.8.1 版:没用!
- elasticsearch-py api 版本 1.4.0 和 2.1.0:没用!
- pyelasticsearch 1.4 版:有效!
elasticsearch-py 的代码片段是:
使用 python-requests 时,代码为:
我的弹性搜索版本是:
所以我的问题是:
- 这是编写此查询的最佳方式吗?
- 有没有解释为什么 elasticsearch-py 行为异常?
- 在 elasticsearch-py 上是否有解决此问题的方法?
elasticsearch - ElasticSearch 自动输入
我想在产品代码中搜索 - 字符和数字的混合(例如:A210/444
、、Alexx 1982 X
...)。(顺便说一句:有没有人在这种类型的数据中搜索的一些最佳实践?)
我有一个索引index_analyzer
和search_analyzer
:
问题在于自动输入。
index_analyzer
没关系,所有值都是 word 类型。
但是,search_analyzer
(没有 edgeNGram)...
...识别1982
为数字,这会在搜索中出现问题(使用_all
占位符)。当我尝试仅搜索时,在搜索结果中没有命中1982
。
有什么方法可以强制只使用某些字符串类型吗?
感谢您的任何想法!
马丁