0

我正在使用elasticsearch_dsl哪个效果很好。

但是,我希望根据发送的用户令牌过滤结果。

我尝试使用 rest_frameworks 的过滤器,但没有成功。

实现这一目标的正确方法是什么?

访问结果的 URL

http://localhost:9200/_search

模型.py

class Task(models.Model):
    title = models.CharField("Title", max_length=10000, blank=True)
    owner = models.ForeignKey('auth.User', blank=True, null=True)

搜索.py

from rest_framework import filters
connections.create_connection()

class TaskIndex(DocType):
    title = String()
    class Meta:
        index = 'task-index'

    def filter_queryset(self, request, queryset, view):
        return queryset.filter(owner=request.user)


def bulk_indexing():
    TaskIndex.init()
    es = Elasticsearch()
    bulk(client=es, actions=(b.indexing() for b in models.Task.objects.all().iterator()))


def _search(title):
    s = Search().filter('term', title=title.text)
    response = s.execute()
    return response
4

1 回答 1

-1

只需修改_search功能以也按用户过滤。我不知道你在 ES 中以什么格式存储用户,但它应该是这样的:

from elasticsearch_dsl.query import Q

def _search(title, user):
    s = Search().query('bool', must=[ 
        Q('term', title=title.text),
        Q('match', owner=user.pk),
    ])
    return s.execute()
于 2017-03-02T02:18:42.933 回答