2

Я разрабатываю простой инструмент nlp и используя elasticsearch-dsl как инструмент es с django.Конфигурирование конфигурации с использованием elasticsearch-dsl DocType

У меня будет два «DocType», Entity и Intent. Я создал свой собственный анализатор, который:

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() создаст сопоставление для этого документа. Это действительно создает отображение на мои эс Однако, я не мог сделать то же самое с Intent, после Entity.init() Это дает ниже ошибок (только для объекта документа :(!):..

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

Любой идея чтобы решить эту проблему? Я действительно хочу использовать Entity.init() и Intent.init(), если это возможно.

ответ

4

Вы пытаетесь определить новый analyzers для Intent типа на открытом index. Это не допускается и следовательно, вы видите ошибку.

Вы должны сначала указать close индекс, а затем запустить

Intent.init() 

и снова открыть индекс. Вы можете обратиться к documentation за дополнительной информацией.

EDIT 1 Чтобы закрыть индекс, вам необходимо использовать низкоуровневый питон official client.

from elasticsearch import Elasticsearch 

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

Даже dsl library использует его для test отображения, так как он создается на вершине питона клиента.

+0

как я могу закрыть его с помощью elasticsearch-dsl? я не мог найти способ, я уже думал об этом. – avador

+0

Я отредактировал ответ, PLS посмотреть. – ChintanShah25

+0

Большое спасибо! он работает :) – avador

Смежные вопросы