Saya menggunakan perpustakaan Django-elasticsearch-dsl klien tingkat tinggi untuk berinteraksi dengan elasticsearch.

Ini adalah file Document.py saya

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',]

Berikut adalah file model dari model impor 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()

Saya ingin menggunakan kueri "istilah" dan "istilah" [Mis. Q("term", Category="Male")] yang mengharuskan saya untuk mendefinisikan Kategori sebagai KeywordField di Documents.py, Bagaimana melakukannya? atau Apakah saya melewatkan sesuatu?

0
Sachin 7 Mei 2021, 13:17

1 menjawab

Jawaban Terbaik

Saya menemukan cara memetakan bidang kata kunci secara eksplisit:

Dalam dokumen.py

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

Daripada membiarkan Django-Elasticsearch-Dsl menangani pemetaan, kita harus secara eksplisit memetakan index.

0
Sachin 12 Mei 2021, 12:21