検索にはDjango Haystackを使用しています。
結果を検索するときに、自分のモデルのフィールドのみを対象にしたいと考えています。title
ただし、現時点では、検索語がモデルのいずれかのフィールドにある場合に結果が返されます。
例: xyzを検索すると、 xyzがbio
フィールドにある結果が得られます。
これは起こるべきではありません。xyzがtitle
フィールドにある結果のみを返したいのです。Artist.title
検索以外のすべてのフィールドを完全に無視します。
artists/models.py
:
class Artist(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=100)
strapline = models.CharField(max_length=255)
image = models.ImageField(upload_to=get_file_path, storage=s3, max_length=500)
bio = models.TextField()
artists/search_indexes.py
from haystack import indexes
from app.artists.models import Artist
class ArtistIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True, model_attr='title')
def get_model(self):
return Artist
SQLクエリのように考えていると思います:
SELECT * FROM artists WHERE title LIKE '%{search_term}%'
アップデート
use_template=True を削除するという提案に従って、私の search_indexes.py は次のようになります。
from haystack import indexes
from app.artists.models import Artist
class ArtistIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, model_attr='title')
title = indexes.CharField(model_attr='title')
def get_model(self):
return Artist
しかし、私は同じ問題を抱えています。(python manage.py rebuild_index を試しました)
違いがある場合、これは私のHaystack設定です。
HAYSTACK_CONNECTIONS = {
'default': {
'ENGINE': 'haystack.backends.simple_backend.SimpleEngine',
},
}