【问题标题】:Search Nested Fields on Elasticsearch DSL DRF在 Elasticsearch DSL DRF 上搜索嵌套字段
【发布时间】:2021-07-08 23:04:49
【问题描述】:

这是 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',
        'description',
    )

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

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



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

【问题讨论】:

    标签: django elasticsearch django-rest-framework elasticsearch-dsl elasticsearch-dsl-py


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多