如何在 Django Elasticsearch 中映射关键字字段?
How to map keyword field in Django Elasticsearch?
我正在使用 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,该怎么做?还是我遗漏了什么?
我想出了如何显式映射关键字字段:
在documents.py
Category = fields.TextField(
fields={'raw': fields.KeywordField()},
analyzer="keyword")
与其让 Django-Elasticsearch-Dsl 负责映射,不如显式映射我们的索引。
我正在使用 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,该怎么做?还是我遗漏了什么?
我想出了如何显式映射关键字字段:
在documents.py
Category = fields.TextField(
fields={'raw': fields.KeywordField()},
analyzer="keyword")
与其让 Django-Elasticsearch-Dsl 负责映射,不如显式映射我们的索引。