Добавление настроек и сопоставления перколятора с помощью Python
Я добавил индекс перколятора по умолчанию с кодом Python:
class Document(DocType):
title = Text()
query = Percolator()
class Meta:
index = 'my-index'
doc_type = '_doc'
def save(self, **kwargs):
return super(Document, self).save(**kwargs)
Я также хочу добавить это некоторые настройки с Python. Вот весь мой запрос, отображение и настройка. Я могу поставить это через curl
PUT /my-index
{
"settings": {
"analysis": {
"analyzer": {
"standard_lowercase_example": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["lowercase"]
},
"turkish_lowercase_example": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["turkish_lowercase"]
}
},
"filter": {
"turkish_lowercase": {
"type": "lowercase",
"language": "turkish"
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "standard_lowercase_example"
},
"query": {
"type": "percolator"
}
}
}
}
}
Вкратце, я пытаюсь добавить вышеупомянутый запрос curl с моим кодом Python. Вот весь мой код на Python. Я думаю, что я должен использовать put_settings(**kwargs)
из API, но я не мог понять, как объединить.
import json
from elasticsearch_dsl import (
connections,
DocType,
Mapping,
Percolator,
Text
)
from elasticsearch_dsl.query import (
SpanNear,
SpanTerm
)
from elasticsearch import Elasticsearch
# Read the json File
json_data = open('titles.json').read()
data = json.loads(json_data)
docs = data['response']['docs']
# creating a new default elasticsearch connection
connections.configure(
default={'hosts': 'localhost:9200'},
)
class Document(DocType):
title = Text()
query = Percolator()
class Meta:
index = 'my-index'
doc_type = '_doc'
def save(self, **kwargs):
return super(Document, self).save(**kwargs)
# create the mappings in elasticsearch
Document.init()
# index the query
for doc in docs:
terms = doc['title'].split(" ")
clauses = []
for abcd in terms:
x = abcd.replace("İ", "i").replace(",", "").replace("î", "i").replace("I", "ı")
term = x.lower()
field = SpanTerm(title=term)
clauses.append(field)
query = SpanNear(clauses=clauses)
item = Document(query=query)
item.save()
Заранее спасибо!
РЕДАКТИРОВАТЬ 1:
Я могу создать индекс и добавить свои настройки с кодом ниже, но я не смог объединить мой код.
from elasticsearch import Elasticsearch
from elasticsearch_dsl import connections
es = connections.create_connection(hosts=['localhost'], timeout=20)
# conntect es
#es = Elasticsearch([{'host': config.elastic_host, 'port': config.elastic_port}])
# delete index if exists
# index settings
settings = {
"settings": {
"analysis": {
"analyzer": {
"standard_lowercase_example": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["lowercase"]
},
"turkish_lowercase_example": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["turkish_lowercase"]
}
},
"filter": {
"turkish_lowercase": {
"type": "lowercase",
"language": "turkish"
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "standard_lowercase_example"
},
"query": {
"type": "percolator"
}
}
}
}
}
# create index
es.indices.create(index='my-index', ignore=400, body=settings)