Hello,
I try to use Elasticsearch DSL docs' Persistence Example to input data. (https://elasticsearch-dsl.readthedocs.io/en/latest/) But it can't run on python3. Code show as below:
from datetime import datetime
from elasticsearch_dsl import Document, Date, Integer, Keyword, Text
from elasticsearch_dsl.connections import connections
connections.create_connection(hosts=['localhost'])
class Article(Document):
title = Text(analyzer='snowball', fields={'raw': Keyword()})
body = Text(analyzer='snowball')
tags = Keyword()
published_from = Date()
lines = Integer()
class Index:
name = 'blog'
settings = {
"number_of_shards": 2,
}
def save(self, ** kwargs):
self.lines = len(self.body.split())
return super(Article, self).save(** kwargs)
def is_published(self):
return datetime.now() >= self.published_from
Article.init()
article = Article(meta={'id': 42}, title='Hello world!', tags=['test'])
article.body = ''' looong text '''
article.published_from = datetime.now()
article.save()
article = Article.get(id=42)
print(article.is_published())
print(connections.get_connection().cluster.health())
The error is that ImportError: cannot import name 'Document' from 'elasticsearch_dsl'.
And I try to use DocType to replace Document. The program tells me that ValueError: Empty value passed for a required argument 'index'.
So I change </Article.init()> to </Article.init('blog')>. It also cannot run. It shows that elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'Root mapping definition has unsupported parameters: [doc : {properties={published_from={type=date}, title={analyzer=snowball, fields={raw={type=keyword}}, type=text}, body={analyzer=snowball, type=text}, lines={type=integer}, tags={type=keyword}}}]') .
I want to know how could I deal with this problem?
My system operation is Win10.
Python version: 3.7
Elasticsearch version: 7.1.1
I try to use elasticsearch version 6.8 and elasticsearch_dsl version 6.4.0. The problem is solved. But I still want to use the latest version^_^