내 모델에서 텍스트를 검색하고 db 쿼리로 동시에 필터링해야합니다. 예를 들어db 쿼리로 haystack 결과를 필터링하는 방법
는 :
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
그래서 나는 사용자 및 전체 텍스트 검색을 통해 텍스트의 모든 MyModel 개체를 필터링 할. 이와 같은 매끄러운은 :
qs = MyModel.objects.filter(users=request.user)
sqs = MyModelIndex.objects.filter(text=request.GET['q'])
intersection = some_magic_function(qs, sqs)
또는
intersection = some_other_magic_function(
qs_kwargs={'users': request.user},
sqs_kwargs={'text': request.GET['q']}
)
물론 원하는 DB 쿼리는 훨씬 더 복잡 할 수 있습니다.
나는 주요 결함으로 몇 가지 가능한 솔루션을 모두 볼 : 장고에
만들기 교차 : QS에서 ID를 추출하고 그 반대의 경우도 마찬가지 SQS 필터 또는에서 사용할. 문제 : 성능. 우리는 페이지 매김을 사용하여 회피 할 수 있으며 주어진 페이지와 그 전임자에 대해서만 교차를 수행 할 수 있습니다. .이 경우 우리는 총 개수 (
색인 모든 M2M 관련 분야 문제 잃게 : 성능, (나는) DB가 훨씬 더 같은 쿼리를 할 것으로 판단 기능을 복제를 등 주석
같은 DB-기능 건초 더미를 사용하지 마십시오 (MySQL 용 이동 또는 posgresql 내장 전체 텍스트 검색.
를 내가 뭔가를 분명 그리워 생각합니다. 케이스는 매우 일반적인 것 같다. 기존의 솔루션이 있습니까?
"교차점"변수에 어떤 데이터가 있어야합니까? MyModel과 MyModelIndex 객체를 포함해야합니까? 또는 당신은 단지 하나 또는 다른 것을 필요로합니까? 달성하고자하는 것을 설명 할 수 있다면 도움이 될만한 컨텍스트는 없습니다. –
@TitusP : 제 교차로에서 쿼리 세트 또는 검색 결과를 원합니다. 필자는 모든 MyModel 개체를 사용자별로 필터링하고 전체 텍스트 검색을 통해 텍스트로 필터링하려고합니다. – Nik
어떤 건초 더미 엔진을 사용하십니까? –