Возвратите документы с полем массива, которое содержит ВСЕ элементы из пользовательского массива в Elasticsearch 6.x

Во всех моих документах есть поле tags типа Array. Я хочу найти и вернуть все документы, которые имеют перекрестокtags с массивом пользовательского ввода. Количество элементов является переменным, а не фиксированным размером.

Примеры:
tags:["python", "flask", "gunicorn"]
input:["python"]

  • Это вернет true, потому что все элементы в input находятся в tags.

tags:["nginx", "pm2"]
input:["nodejs", "nginx", "pm2", "microservice"]

  • Это вернет false, потому что "nodejs" и "microservice" нет в tags.

Я просмотрел запрос terms, но не думаю, что он работает для массивов.

Я также нашел это, Свойство массива Elasticsearch должно содержать заданные элементы массива., но решение для старых версий Elasticsearch, и синтаксис изменился.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
437
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я полагаю, вы ищете terms_set - ссылка: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-set-query.html

PUT tags

POST tags/_doc
{
  "tags": ["python", "flask", "gunicorn"]
}

POST tags/_doc
{
  "tags": ["nginx", "pm2"]
}

GET tags/_search
{
  "query": {
    "terms_set": {
      "tags": {
        "terms": ["nginx", "pm2"],
        "minimum_should_match_script": {
          "source": "params.num_terms"
        }
      }
    }
  }
}

Возвращено:

  "hits" : {
    "total" : 1,
    "max_score" : 0.5753642,
    "hits" : [
      {
        "_index" : "tags",
        "_type" : "_doc",
        "_id" : "XZqN_mkB94Kxh8PwtQs_",
        "_score" : 0.5753642,
        "_source" : {
          "tags" : [
            "nginx",
            "pm2"
          ]
        }
      }
    ]
  }

Запрос полного списка в вашем примере:

GET tags/_search
{
  "query": {
    "terms_set": {
      "tags": {
        "terms": ["nodejs", "nginx", "pm2", "microservice"],
        "minimum_should_match_script": {
          "source": "params.num_terms"
        }
      }
    }
  }
}

Не дает результатов, как и ожидалось:

  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }

Спасибо, это сработало. Я не могу поверить, что не смог найти этот кусок документации с огромным количеством поиска в Google, который я сделал.

Hid 09.04.2019 04:54

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