Добавление настроек и сопоставления перколятора с помощью 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)

0 ответов

Другие вопросы по тегам