微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Elasticsearch DSL DRF 上搜索嵌套字段

如何解决在 Elasticsearch DSL DRF 上搜索嵌套字段

这是 document.py

@chapter_index.doc_type
class ChapterDocument(Document):
    subject = fields.ObjectField(properties={
        'name': fields.TextField(),'description': fields.TextField()
    })
    
    topics = fields.nestedField(properties={
        'name': fields.TextField(),'description': fields.TextField(analyzer=html_strip),'duration': fields.IntegerField()
    })

    class Django:
        model = Chapter
        fields = [
            'name','description','order_no'
        ]
        related_models = [Subject,Topic]

    def get_queryset(self):
        return super(ChapterDocument,self).get_queryset().select_related(
            'subject'
        )

    def get_instances_from_related(self,related_instance):
        if isinstance(related_instance,Subject):
            return related_instance.chapters.all()
        if isinstance(related_instance,Topic):
            return related_instance.chapter

这是 DocumentViewSet

class ChapterSearchViewSet(DocumentViewSet):
    document = ChapterDocument
    serializer_class = ChapterDocumentSerializer

    filter_backends = [
        SearchFilterBackend,]

    search_fields = (
        'subject.name','subject.description','name',)

    search_nested_fields = {
        'topics': ['description']
    }

search_fields 正在运行。当我想在 nestedField搜索时,search_nested_fields 不起作用。我收到这样的错误。这来自 search_nested_fields 中的 'topics': ['description']。

error



索引正在工作。我想按主题描述搜索章节。也许我在 search_nested_fields 中使用了错误的格式。我遵循了 elasticsearch-dsl-drf 文档。但是出现这个错误

解决方法

根据elasticsearch-dsl-drf documentation,声明search_nested_fields的新方法是这样的:

search_nested_fields = {
    'topics': {
        'path': 'topics','fields': ['description'],}
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?