1

我正在使用 eland 调用弹性搜索数据。文档很简单,我能够实现它,但是在搜索它搜索的索引时,它es_index_pattern基本上是一个通配符索引字符串。

from elasticsearch import ElasticSearch
import eland as ed

es = Elasticsearch(hosts="myhost", "port":0000)

search_body={
    "bool":{
            "filter":[
                {"exists": {"field": "customer_name"}},
                {"match_phrase": {"city": "chicago"}},
                ]
        }

    }

# I am able to get the results if I search the index through "elasticsearch" api. Tried this repetitively and it works every time
results = es.search(index="my_index", body=search_body)

# But, I do not get results (but ReadTimeoutError) if I connect to 'my_index' index via localhost Elasticsearch node using Eland
df = ed.DataFrame(es_client=es, es_index_pattern = 'my_index')

我必须手动输入错误消息,因为我无法将错误复制到我正在使用的环境之外。另外,我的主机和端口会有所不同

...
  File ".../elasticsearch/transport.py", line 458, in perform_request
    raise e
  File "......elasticsearch/transport.py", line 419, in perform_request
  File "..... /elasticsearch/connection/http_urllib3.py", line 275, in perform_request
    raise ConnectionTimeout("TIMEOUT", str(e), e)
elasticsearch.exceptions.ConnectionTimeout: ConnctionTimeout caused by - ReadTimeoutError(HTTPSConnectionPool(host=myhost', port=0000): Read timed out. (read timeout=10)

我认为这elasticsearch能够得到结果,因为它调用了确切的索引名称,因此不会遇到超时。但是,Eland宁可将es_index_patternmy_index用作通配符 ie *my_index,因此我必须遇到ReadTimeOutError.

我查看了源代码,看看是否有什么我能做的,所以它没有将索引作为模式搜索,而是完全匹配。但是,我看不到在文档和源代码中搜索确切索引的选项。

如何在 Eland 中搜索准确的索引字符串?

资料来源:

4

1 回答 1

0

无论您是否在索引模式中使用通配符,Eland 与 Elasticsearch 通信的方式都是相同的。所以这让我认为您的请求由于连接性或请求太大而无法在 Elasticsearch 上及时处理而超时(您是否有完整的超时错误回溯?)

也许增加您request_timeout对 Elasticsearch 客户端构造函数的价值会有所帮助?

(免责声明:我是 Eland 的维护者,为 Elastic 工作)

于 2022-01-12T14:24:04.837 回答