首页 > 解决方案 > django_elasticsearch_dsl_drf 在带有空格的文本字段中搜索返回 null

问题描述

我的 Elasticsearch 中有以下索引:

  "mappings": { 
      "properties": {     
        "content": {
            "type": "text"
        },
       .
       .
       .

当我使用 kibana 控制台content通过值在字段中搜索时This is,它会返回内容中带有短语This is的所有文档,但使用 django_elasticsearch_dsl_drf(和 django rest 框架)它什么都不返回,并且搜索只能通过没有空格的值进行,我的意思是如果我搜索This它返回所需结果的单词。

我的文件:

@INDEX.doc_type
class PostDocument(Document):
    content = fields.TextField()
    ...

我的序列化器:

class PostDocumentSerializer(DocumentSerializer):
    """Serializer for the Post document."""
    content = serializers.CharField()
    ...

我的观点:


class PostDocumentView(DocumentViewSet):
    document = PostDocument
    serializer_class = PostDocumentSerializer
    pagination_class = PageNumberPagination

    filter_backends = [
        FilteringFilterBackend,
        IdsFilterBackend,
        OrderingFilterBackend,
        DefaultOrderingFilterBackend,
        SearchFilterBackend,
        SuggesterFilterBackend,
    ]
    # Define search fields
    search_fields = (
        'content',
        ...
    )
    filter_fields = {
        'content': {
            'field': 'content',
            'lookups': [
                LOOKUP_QUERY_CONTAINS,
                LOOKUP_QUERY_IN
            ]
        },
    }

并且要测试的 URL 是: http://127.0.0.1:8000/social_networks/posts_search/?format=json&page=1&content=This is

标签: djangoelasticsearchdjango-rest-frameworkelk

解决方案


使用django-elasticsearch-dsl-drf.herokuapp.com作为游乐场。

用空间搜索对我有用

Playground应用程序的源代码可以在 GitHub 上的barseghyanartur/django-elasticsearch-dsl-drf-heroku-demo上找到。


推荐阅读