使用 elasticsearch-dsl DocType 映射配置
Mapping configuration using elasticsearch-dsl DocType
我正在开发一个简单的 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 library
也将其用于 test 映射,因为它是在 python 客户端之上创建的。
我正在开发一个简单的 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 library
也将其用于 test 映射,因为它是在 python 客户端之上创建的。