首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性搜索结果按用户过滤

弹性搜索结果按用户过滤
EN

Stack Overflow用户
提问于 2017-03-02 09:02:06
回答 1查看 757关注 0票数 0

我使用的是elasticsearch_dsl,它工作得很好。

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

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

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

访问结果的URL

代码语言:javascript
复制
http://localhost:9200/_search

Models.py

代码语言:javascript
复制
class Task(models.Model):
    title = models.CharField("Title", max_length=10000, blank=True)
    owner = models.ForeignKey('auth.User', blank=True, null=True)

Search.py

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-03-02 10:18:43

只需将_search函数修改为也按用户过滤即可。我不知道在ES中存储用户的格式是什么,但应该是这样的:

代码语言:javascript
复制
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()
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42545037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档