Elasticsearch Python DSL персистентность

ES Python DSL новичок здесь, я запрашиваю "основной" индекс, используя category, subcategory and topic и запись выбранного подмножества полей (из результатов) во "вторичный" индекс, оба на aws elasticsearch service,

Я создал класс отображения, как показано здесь, и прошел через шаги. Но я не могу получить код save документ для индексации, используя постоянство.

Тем не менее, я могу заставить его работать, создав питона dict и звонит es_sec.index(index='secondary', doc_type='sec_post', body=doc), Я не уверен, что я делаю здесь не так. Я полагаю, мне нужно прикрепить постоянство (отображение) к вторичному индексу и не уверен, как это сделать через DSL

Спасибо за вашу помощь!

# -*- coding:utf-8 -*-
class Post(DocType):
    title = Keyword()
    created_on = Date()
    description = Text(analyzer='snowball')
    category = Keyword()
    subcategory = Keyword()

    class Meta:
        index = 'message'

    def save(self, ** kwargs):
        self.created_at = datetime.now()
        return super().save(** kwargs)

    def is_published(self):
        return datetime.now() > self.created_on



es_host = '<es_host>.es.amazonaws.com'
auth = AWSRequestsAuth(aws_access_key='aws_access_key',
                       aws_secret_access_key='aws_secret_access_key',
                       aws_host=es_host,
                       aws_region='aws_region',
                       aws_service='es')

# use the requests connection_class and pass in our custom auth class
es_pri = Elasticsearch(host=es_host,
                          port=80,
                          connection_class=RequestsHttpConnection,
                          http_auth=auth, 
                          retry_on_timeout=True)

es_sec = Elasticsearch(host='<sec host>.es.amazonaws.com', 
                          port=80,
                          connection_class=RequestsHttpConnection,
                          retry_on_timeout=True)


# e.g. "sports & entertainment", "athletics", "marathon"
def fetch_data(category, subcategory="", affinity=""):
  q = category + ' ' +subcategory + ' ' + affinity
  if q.strip() is "":
    return None
  mm = MultiMatch(query=q.strip(), type='best_fields',fields=['tags', 'description','title','message','description'])
  s = Search(using=es_client, index="primary") \
    .query(mm) 


  count = s.count()
  if count > 255: count = 255
  posts = s[0:count].execute()

  for j,hit in enumerate(posts):

    desc = hits.desc

    if len(tags_list) < 1: continue 

    #this runs OK but don't see documents written to index
    Post.init()
    sec_post = Post()
    sec_post.category = category
    sec_post.subcategory = subcategory
    sec_post.description = desc
    sec_post.created_on = datetime.now()
    sec_post.save(using=es_sec,index='secondary') #this doesn't work   
    sec_post.save()    # neither does this work (i.e. doesn't write to the index)

    **#this successfully writes the doc to "secondary" index**
    doc = {}
    doc["category"] = category
    doc["subcategory"] = subcategory  
    doc["description"] = desc 
    doc["created_on"] = datetime.now() 
    es_sec.index(index='secondary', doc_type='sec_post', body=doc)
  return 

cats_list = []

# e.g. cat = "sports & entertainment", "athletics", "marathon"
for i,cat in enumerate(cats_list):
  create_sec_doc(cat[0],cat[1],cat[2])

0 ответов

Другие вопросы по тегам