저는 최근 내 웹 검색에서 Django Haystack (v2.1.0)과 Elasticsearch (v0.90.5)를 검색 엔진으로 사용하여 전체 텍스트 검색을 구현하려고했습니다. 필자의 목표는 하나의 쿼리로 주어진 Song 객체의 제목 필드, 키 라인 필드 및 작성자 필드를 검색 할 수있게하는 것입니다. Django Haystack EdgeNGrams를 Many-to-Many 필드와 함께 사용하는 방법?
from haystack import indexes
from songs.models import Song
class SongIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
content_auto = indexes.EdgeNgramField(model_attr='title')
content_auto = indexes.EdgeNgramField(model_attr='key_line')
authors = indexes.MultiValueField()
content_auto = indexes.EdgeNgramField(model_attr='authors')
def get_model(self):
return Song
def prepare_authors(self, object):
return [author.last_name for author in object.authors.all()]
def index_queryset(self, using=None):
return self.get_model().objects.all()
는 song_text.txt 확실 해요
{{ object.title}}
{{ object.key_line}}
{% for author in object.authors.all %}
{{ author.last_name}}
{% endfor %}
내 search_index.py 몹시 잘못
class Song(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author)
key_line = models.CharField(max_length=300, blank=True)
def __unicode__(self):
return self.title
class Author(models.Model):
first_name = models.CharField(max_length=30)
middle_name = models.CharField(max_length=30, blank=True)
last_name = models.CharField(max_length=40)
email = models.EmailField(blank=True, verbose_name='e-mail')
def __unicode__(self):
if self.middle_name:
return u'%s %s %s' % (self.first_name, self.middle_name, self.last_name)
else:
return u'%s %s' % (self.first_name, self.last_name)
class Meta:
ordering = ('last_name','first_name')
Search_index.py
Models.py : 여기 내 코드입니다 저자들에게는 필사적이었습니다. 나는 제목과 key_line을 제대로 얻을 수 있었는데, 내가 검색어를 입력하면 제목에 검색어가 있거나 키 라인에 검색어가있는 결과를 얻었습니다. 동일한 테스트를 수행하는 대신 작성자의 성을 쿼리해도 해당 작성자에게 결과가 제공되지 않습니다.
관련 문서의 색인 생성에 대한 정보를 찾았지만 관련된 필드와 관련된 EdgeNGrams 관련 항목을 찾을 수 없었습니다. 가능한가요? 이상 적으로 저자의 이름, 성, 이름을 쿼리 할 수 있기를 원합니다.
미리 도움을 주셔서 감사합니다. 더 자세한 정보가 필요하면 알려주세요.
찾았습니까? – iamkhush