django - 使用 elasticsearch-dsl DocType 映射配置

标签 django elasticsearch django-rest-framework elasticsearch-dsl

我正在开发一个简单的 nlp 工具,并使用 elasticsearch-dsl 作为带有 django 的 es 工具。

我将有两个“DocType”,实体和意图。我已经创建了自己的分析器,它是:

turkish_stop = token_filter('turkish_stop', type='stop', stopwords="_turkish_")
turkish_lowercase = token_filter('turkish_lowercase', type='lowercase', language="turkish")
turkish_stemmer = token_filter('turkish_stemmer', type='stemmer', language='turkish')

turkish_analyzer = analyzer('turkish_analyzer', tokenizer='whitespace', filter=['apostrophe', 'asciifolding',
                                                                                turkish_lowercase, turkish_stop,
                                                                                turkish_stemmer])

例如,在每个文档中,我都有一个自定义映射;

class Entity(DocType):
    entity_synonyms = String(analyzer=es.turkish_analyzer, include_in_all=True)
    entity_key = String(index='not_analyzed', include_in_all=False)

    class Meta:
        index = es.ELASTICSEARCH_INDEX
        doc_type = es.ELASTICSEARCH_ENTITY_DOCTYPE

根据文件http://elasticsearch-dsl.readthedocs.org/en/latest/persistence.html#persistence . Entity.init() 将为此文档创建映射。它确实在我的 es 上创建了映射(仅适用于实体文档!:()。但是,在 Entity.init() 之后,我无法对 Intent 做同样的事情。 它给出以下错误:

IllegalOperation: You cannot update analysis configuration on an open index, you need to close index nlp first.

有什么办法可以解决这个问题吗?如果可能的话,我真的很想使用 Entity.init() 和 Intent.init()。

最佳答案

您正在尝试为打开的 index 上的 Intent 类型定义新的 analyzers。这是不允许的,因此您会看到错误。

你必须先close索引,然后运行

Intent.init()

然后重新打开索引。可以引用documentation了解更多信息。

编辑 1 您必须使用低级 python official client关闭索引。

from elasticsearch import Elasticsearch

es = Elasticsearch()
es.indices.close(index="nlp")

甚至 dsl 库 也使用它来 test映射,因为它是在 python 客户端之上创建的。

关于django - 使用 elasticsearch-dsl DocType 映射配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34865507/

相关文章:

django - 列表序列化器多个对象创建

python - 无法分配 "<class ' django.contrib.auth.models.User' >": "Model.user"必须是 "User"实例

sql - Django 模型 - 外键作为主键

reactjs - 当需要在数组类型的弹性场上进行搜索时,没有显示有关DataSearch的建议

amazon-web-services - 无法为 AWS es 域注册快照存储库

python - Django Rest Framework-在POST上创建外键对象

django - 在 Heroku 上部署带有 Django Rest Framework 后端的 Angular 4 前端

python - 鹡鸰中的类别无法解析

python - Django 中的单模型动态数据库设置

elasticsearch - 无法在Elasticsearch上创建映射