微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Django Elasticsearch 中映射关键字字段?

如何解决如何在 Django Elasticsearch 中映射关键字字段?

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

这是我的 Document.py 文件

version: "3"

services:    
    PHP:
        build:
            context: ./dev/docker/images/PHP
        restart: always
        working_dir: /var/www/html/magento2
        volumes:
            - ./:/var/www/html/magento2
        environment:
          ELASTICSEARCH_HOSTS: http://elasticsearch:9200
          MysqL_HOST: MysqL
          MysqL_ROOT_PASSWORD: password
        ports:
            - "9000:9000"
    
    Nginx:
        restart: always
        image: Nginx:latest
        working_dir: /var/www/html/magento2
        volumes:
            - ./:/var/www/html/magento2
            - ./dev/docker/images/Nginx/magento.conf:/etc/Nginx/conf.d/default.conf
            - ./data/certbot/conf:/etc/letsencrypt
            - ./data/certbot/www:/var/www/certbot
        ports:
            - "80:80"
            - "443:443"
            
    certbot:
        image: certbot/certbot
        volumes:
            - ./data/certbot/conf:/etc/letsencrypt
            - ./data/certbot/www:/var/www/certbot

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

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

我想使用“term”和“terms”查询[例如。 Q("term",Category="Male")] 其中我需要在 Documents.py 中将 Category 定义为 KeywordField,该怎么做?还是我遗漏了什么?

解决方法

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

在文档中

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?