Как использовать функцию SimpleQueryString из эластичного поиска? - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь написать приложение для django и использовать в немasticsearch с библиотекой pythonasticsearch-dsl.Я не хочу создавать все операторы switch-case, а затем соответствующим образом передавать поисковые запросы и фильтры.

Мне нужна функция, которая сама выполняет анализ.Например, если я передаю «некоторые текстовые URL-адреса: теги github.com: es, es-dsl, django», функция должна вывести соответствующий запрос.

Я искал его в документации поasticsearch-dsl и нашел функциюэто делает разбор.https://github.com/elastic/elasticsearch-dsl-py/search?utf8=%E2%9C%93&q=simplequerystring&type= Однако я не знаю, как его использовать.Я попытался s = Search(using=client).query.SimpleQueryString("1st|ldnkjsdb"), но он показывает ошибку синтаксического анализа.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 30 июля 2019

Вы можете просто подключить SimpleQueryString к объекту Search, вместо словаря отправлять элементы в качестве параметров объекта.

from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
from elasticsearch_dsl.query import SimpleQueryString

client = Elasticsearch()
_search = Search(using=client, index='INDEX_NAME')

_search = _search.filter( SimpleQueryString(
     query = "this + (that | thus) -those", 
     fields= ["field_to_search"],
     default_operator= "and"
))

Многие elasticsearch_dsl просто меняют словарьпредставление классам функций, которые делают код выглядящим питоническим и избегают использования трудно читаемых JSON-файлов эластичного поиска.

0 голосов
/ 22 мая 2018

Я предполагаю, что вы спрашиваете об использованииластиком ввода-вывода из эластичной строки со строкой запроса, как если бы вы отправляли запрос с данными json в API эластичного поиска.Если это так, то вот как вы собираетесь использоватьasticsearch-dsl:

Предположим, у вас есть запрос в переменной query , такой как:

{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "this AND that OR thus"
        }
    }
}

иТеперь сделайте это:

es = Elasticsearch(
    host=settings.ELASTICSEARCH_HOST_IP, # Put your ES host IP
    port=settings.ELASTICSEARCH_HOST_PORT, # Put yor ES host port
)
index = settings.MY_INDEX # Put your index name here
result = es.search(index=index, body=query)
...