새로 생성 된 객체를 자동으로 색인 생성하는 데 문제가 있습니다.Django & Elasticsearch로 새 객체 색인하기
groupby
을 사용하여 맞춤 데이터를 만들었습니다.
새 모델을 만들 때마다 색인을 생성해야합니다.
은 "제목"값을 색인하지만 "태그"값은 없습니다.
그래서 수동 함수 "manual_index"를 만들었습니다. 이를 실행할 때 "태그"값 은이 색인에 추가됩니다. 그러나이 프로세스는 수동으로 트리거되어야합니다.
새 개체를 만들 때마다 "태그"값을 저장하려면 어떻게해야합니까?
내가 사용하고 elasticsearch_dsl
Search.py
class TaskIndex(DocType):
title = String()
class Meta:
index = 'task-index'
def manual_index():
TaskIndex.init()
es = Elasticsearch()
bulk(client=es, actions=(b.indexing() for b in models.Task.objects.all().iterator()))
Models.py
from itertools import groupby
class Tag(models.Model):
name = models.CharField("Name", max_length=5000, blank=True)
taglevel = models.IntegerField("Tag level", null=True, blank=True)
class Item(models.Model):
title = models.CharField("Title", max_length=10000, blank=True)
tag = models.ManyToManyField('Tag', blank=True)
def get_grouped_tags(self):
tag = self.tag.order_by('taglevel')
grouped_tags = {
tag_level: [
{ 'name': tag_of_level.name, 'taglevel': tag_of_level.taglevel, }
for tag_of_level in tags_of_level
] for tag_level, tags_of_level
in groupby(tag, lambda tag: tag.taglevel)
}
return grouped_tags
def indexing(self):
obj = TaskIndex(
meta={'id': self.id},
title=self.title,
tag=self.get_grouped_tags()
obj.save()
return obj.to_dict(include_meta=True)
아, 미안, 나는'tag' 객체에 대한 의견을 간과. 문제는 Django 측에서 많은 데이터가 저장되기 전에 '인덱싱'이 트리거된다는 것입니다. 그 주위에는 여러 가지 방법이 있으며 가장 안전한 방법은'm2m_changed' 신호를 사용하는 것입니다 - https://docs.djangoproject.com/en/1.10/ref/signals/#m2m-changed –