请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

es通过python生成索引出错:You cannot perform API calls on the default index.

老师,您好!
我运行python的es_type.py,为了生成elasticsearch的索引,但报错了,代码如下:

# -*- coding: utf-8 -*-

from elasticsearch_dsl import DocType, Date, Nested, Boolean, \
    analyzer, Completion, Keyword, Text, Integer

from elasticsearch_dsl.analysis import CustomAnalyzer as _CustomAnalyzer

from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=["localhost"])

class CustomAnalyzer(_CustomAnalyzer):
    def get_analysis_definition(self):
        return {}


ik_analyzer = CustomAnalyzer("ik_max_word", filter=["lowercase"])

class ArticleType(DocType):
    suggest = Completion(analyzer=ik_analyzer)
    title = Text(analyzer="ik_max_word")
    time = Date()
    domain = Text(analyzer="ik_max_word")
    article_url = Keyword()

    class Meta:
        index = "AJobbole"
        doc_type = "article"


if __name__ == "__main__":
    ArticleType.init()

出错信息如下:

Traceback (most recent call last):
  File "E:/homework/python/ScrapySpider/spider/spider/models/es_types.py", line 33, in <module>
    ArticleType.init()
  File "E:\Envs\py3\lib\site-packages\elasticsearch_dsl\document.py", line 136, in init
    i.save(using=using)
  File "E:\Envs\py3\lib\site-packages\elasticsearch_dsl\index.py", line 269, in save
    if not self.exists(using=using):
  File "E:\Envs\py3\lib\site-packages\elasticsearch_dsl\index.py", line 380, in exists
    return self._get_connection(using).indices.exists(index=self._name, **kwargs)
  File "E:\Envs\py3\lib\site-packages\elasticsearch_dsl\index.py", line 108, in _get_connection
    "You cannot perform API calls on the default index.")
ValueError: You cannot perform API calls on the default index.

Process finished with exit code 1

ValueError: You cannot perform API calls on the default index.

是哪里错了呢?这段代码我基本是参照您视频教程里打出来的。
请老师提示,谢谢~

正在回答 回答被采纳积分+3

3回答

归根结底不优秀 2019-06-03 16:34:34

这个问题是因为我们当初pip install elasticsearch-dsl没有指定版本,你可以pip list查看,会发现elasticsearch和elasticsearch-dsl是7.0+的版本,老师安装的是5.1的版本

解决办法:pip uninstall elasticsearch和elasticsearch-dsl

然后pip install elasticsearch-dsl=5.1就行了


0 回复 有任何疑惑可以回复我~
  • 提问者 Xiaoyu_Wu #1
    好的,谢谢同学!
    你知道为什么要5.1的版本才可以吗?
    回复 有任何疑惑可以回复我~ 2019-06-03 16:42:06
  • 归根结底不优秀 回复 提问者 Xiaoyu_Wu #2
    就像jdbc,不同版本对的操作代码是不一样的。我们这个es-dsl7版本的,它生成索引的代码也就变了。https://blog.csdn.net/yaohuan2017/article/details/85338508你可以看下这篇博客,他说的也是这个问题
    回复 有任何疑惑可以回复我~ 2019-06-03 16:58:02
  • 提问者 Xiaoyu_Wu 回复 归根结底不优秀 #3
    好的!谢谢同学!有兴趣的话,加个QQ863985967
    回复 有任何疑惑可以回复我~ 2019-06-05 17:13:55
归根结底不优秀 2019-06-03 11:10:57

兄弟,好像是es版本的问题,导致这种方法失效了

0 回复 有任何疑惑可以回复我~
  • bobby #1
    你的es版本是多少呢
    回复 有任何疑惑可以回复我~ 2019-06-03 11:11:25
  • 提问者 Xiaoyu_Wu #2
    我是用github上最新的elasticsearch-rtf,你呢?
    回复 有任何疑惑可以回复我~ 2019-06-03 11:15:46
  • 归根结底不优秀 回复 提问者 Xiaoyu_Wu #3
    老师说的5.1.1版本
    回复 有任何疑惑可以回复我~ 2019-06-03 11:17:15
归根结底不优秀 2019-06-02 19:30:16

同问+1

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信