Modelimde metin araması yapmalı ve aynı zamanda db sorguları ile filtrelemeliyim. Örneğinds sorgusuyla haystack sonuçlarını filtreleme
:
class MyModel(models.Model):
text = models.TextField()
users = models.ManyToMany(User)
class MyModelIndexIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, model_attr='text')
def get_model(self):
return MyModel
Yani kullanıcı tarafından VE tam metin arama üzerinden bazı metnin bütün MyModel nesneleri filtrelemek istiyorum. Bu gibi Smth:
qs = MyModel.objects.filter(users=request.user)
sqs = MyModelIndex.objects.filter(text=request.GET['q'])
intersection = some_magic_function(qs, sqs)
veya
intersection = some_other_magic_function(
qs_kwargs={'users': request.user},
sqs_kwargs={'text': request.GET['q']}
)
Tabii istenen db sorguları çok daha karmaşık olabilir.
I büyük kusurları ile bazı olası çözüm, tüm bkz Django
Marka kesişim: qs gelen kimlikleri elde ve tersi OKS filtre veya bunları kullanmak. Sorun: performans. Sayfalama kullanarak geçici bir çözüm bulabiliriz ve yalnızca belirli bir sayfa ve öncülleri için kesişim yapabiliriz. . Bu durumda biz toplam sayısı (
Endeksi bütün m2m ilgili alanlar Sorun kaybetmek: performans, (I) db daha iyi gibi sorguları yapacağına inanıyorum işlevselliği çoğaltmak, vb ek açıklamalar
olarak db-özellikler samanlık kullanmayın (mysql için gidin veya PostgreSQL'de yerleşik tam metin araması.
ben belirgin bir şey kaçırmak inanıyoruz. Vaka oldukça yaygın olarak görünüyor. geleneksel çözüm var mı?
"Kesişim" değişkeninizde hangi verilerin olması gerekir? MyModel yanı sıra MyModelIndex nesneleri içermesi gerekiyordu? Yoksa sadece birine mi ihtiyacın var? Neyi başarmaya çalıştığınızı anlatabilirseniz yardımcı olabilirsiniz, olduğu gibi bir bağlam yoktur. –
@TitusP: Kesişimimde ya queryset ya da searchresultset istiyorum. Örneğimde tüm MyModel nesnelerini kullanıcı ve metne göre tam metin araması ile filtrelemek istiyorum. – Nik
Hangi saman motorunu kullanıyorsunuz? –