【问题标题】:How to map keyword field in Django Elasticsearch?如何在 Django Elasticsearch 中映射关键字字段?
【发布时间】:2023-03-16 20:25:01
【问题描述】:

我正在使用 django-elasticsearch-dsl 库作为高级客户端与 elasticsearch 交互。

这是我的 Document.py 文件

from django_elasticsearch_dsl import Document
from django_elasticsearch_dsl.registries import registry
from .models import Clothes

@registry.register_document
class ClothesDocument(Document):

    class Index:
        # Name of the Elasticsearch index
        name = 'clothes'
        settings = {'number_of_shards': 1,
                    'number_of_replicas': 0}

    class Django:
        # The django model associated with this Document
        model = Clothes 

        # The fields of the model you want to be indexed in Elasticsearch
        fields = [
            'Type',
            'Pattern',
            'Category',   
            'Title',
            'Description',]

这是模型文件 从 django.db 导入模型

class Clothes(models.Model):
    Type = models.TextField(null=True)
    Pattern = models.TextField(null=True)
    Type = models.TextField(null=True)
    Brand = models.TextField()
    Category = models.TextField()

我想使用 "term" 和 "terms" 查询 [Ex. Q("term", Category="Male")] 我需要在 Documents.py 中将 Category 定义为 KeywordField,该怎么做?还是我错过了什么?

【问题讨论】:

    标签: python django elasticsearch elasticsearch-dsl-py


    【解决方案1】:

    我想出了如何显式映射关键字字段:

    在documents.py中

     Category = fields.TextField(
                    fields={'raw': fields.KeywordField()},
                    analyzer="keyword")
    

    与其让 Django-Elasticsearch-Dsl 负责映射,我们必须显式地映射我们的索引。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2017-05-18
      • 2016-04-23
      相关资源
      最近更新 更多