ElasticSearch в Python: связь между запросами отдельных терминов - PullRequest
0 голосов
/ 26 октября 2019

Может быть, мой вопрос немного неясен, но я его опишу, так как у меня совсем нет опыта работы с ElasticSeach. То, что у меня есть, это проиндексированные документы в следующем формате:

{"field1": "something", "field2": "nothing", "text_filed": "some_text"}

Что я хочу сделать, так это выполнить запросы так, чтобы field1 и field2 использовались для terms соответствия как filter, а text_field будет использоваться в качестве стандартного запроса. Мой вопрос о filter. Поскольку мои входные данные будут иметь вид:

field1 = ["1", "2", "3"]
field2 = [["one", "one1"], ["two", "2two", "two2"], ...]
query = "whatever"

Я хочу отфильтровать все документы, которые имеют 1 в field1 и либо one или one1 в field2, товсе документы, которые имеют 2 в field1 и two, 2two или two2 как field2 и так далее ...

Для меня довольно ясно, как это сделатьбазовая фильтрация по field1 и field2, но я не знаю, как их объединить. Предпочтительно, я хотел бы знать, как я могу добиться этого с помощью Python DSL.

Ждем ваших ответов!

1 Ответ

1 голос
/ 27 октября 2019

Вам просто нужно объединить некоторую логическую логику.

Тело запроса должно выглядеть следующим образом:

{
    query: {
        bool: {
            must: [
                {
                    bool: {
                        must: [
                            {
                                term: {
                                    field1: "1"
                                }
                            },
                            {
                                fuzzy: {
                                    field2: {
                                        value: "one",
                                        fuzziness: 1
                                    }
                                }
                            }
                        ]
                    }
                },
                {
                    bool: {
                        must: [
                            {
                                term: {
                                    field1: "2"
                                }
                            },
                            {
                                fuzzy: {
                                    field2: {
                                        value: "two",
                                        fuzziness: 1
                                    }
                                }
                            }
                        ]
                    }
                }
            ]
        }
    }
}

Обратите внимание, что каждый логический "кластер" долженбыть обусловленным одним числом из-за того, что упругий тип array сглаживается.

  • этот ответ обусловлен полями, являющимися типами по умолчанию при индексации, если у вас есть поле nestedв вашем отображении это не обязательно будет работать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...