Запросить массив с обязательным совпадением - PullRequest
0 голосов
/ 24 октября 2019

У меня есть индекс документов. Индекс содержит основную часть документов и тип документа, например, pdf, jpeg, png и т. Д. Я могу запросить индекс со словом, и один тип документа, используя, должно просто отлично.

                $params = [
                'index' => 'trial2',
                'type' => '_doc',
                'body' => [
                  'query' => [
                    'bool' => [
                      'must' => [
                        [ 'match' => [ 'file.extension' => "png" ] ],
                        [ 'match' => [ 'content' => "abc" ] ],
                      ]
                    ]
                  ]
                ]
              ];

снимок экрана Проблема в том, что я хотел бы запросить индекс, все еще использующий must, но с массивом типа документа (png, но jpeg, gif, svg, tiff), чтобыЯ классифицирую это как изображение. Как заменить png на массив, чтобы при аренде один был верным.

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

Если file.extension имеет тип text, введите:

Просто добавьте дополнительные токены рядом с Совпадение запроса . Убедитесь, что вы прошли через this (Анализ) и this (Анализатор) , чтобы понять, как это работает внутри.

POST my_png/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "file.extension": "jpg jpeg png"        <---- Note this.
          }
        },
        {
          "match": {
            "content": "abc"
          }
        }
      ]
    }
  }
}

Если file.extension относится к типу keyword (рекомендуется)

Или если у вас есть keyword брат или сестра в file.extension.keyword, вы можете использовать Условия Запрос

POST my_png/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "terms": {                         <---- Terms Query
            "file.extension.keyword": [      <---- Or 'file.extension' field, whichever must of be type `keyword`
              "jpg",
              "jpeg",
              "png"
            ]
          }
        },
        {
          "match": {
            "content": "abc"
          }
        }
      ]
    }
  }
}

Исходя из ваших требований, я хотел бы думать, что вы должны использовать второй вариант, так как для точных совпадений вам нужно будет использовать Terms Query в поле keyword.

Надеюсь, это поможет!

0 голосов
/ 24 октября 2019

Вы можете использовать запрос «термины»:

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-terms-query.html

Запрос условий возвращает документы, которые содержат одно или несколько точных терминов в предоставленном поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...