Запрос Elasticsearch для «вложенного» объекта (без типа: вложенный) - PullRequest
0 голосов
/ 24 апреля 2020

У меня проблемы с созданием запроса ElasticSearch для моего текущего набора данных / отображения. Мое текущее сопоставление:

"products": {
  "mappings": {
    "properties": {
      "active": {
        "type": "long"
      },
      "attributes": {
        "properties": {
          "created_at": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
           }
         },
         "id": {
           "type": "long"
         },
         "language_code": {
           "type": "text",
             "fields": {
             "keyword": {
               "type": "keyword",
               "ignore_above": 256
             }
           }
         },
         "product_column_id": {
           "type": "long"
         },
         "product_id": {
           "type": "long"
         },
         "value": {
           "type": "text",
           "fields": {
             "keyword": {
               "type": "keyword",
               "ignore_above": 256
             }
           },
         }
       "id": {
         "type": "long"
       },
       "published": {
         "type": "long"    
       }
},

Я хочу запросить свой набор данных (продукты), чтобы я мог выбрать все продукты с определенными атрибутами. Каждый атрибут должен соответствовать нескольким критериям. Пример:

Получить все продукты, имеющие хотя бы атрибут, с product_column_id = 2 AND value = '3'.

Я перепробовал все, о чем я могу думать / читать, например:

'bool' => [
  'must' => [
    [
      'match' => [
        'attributes.product_column_id' => 2
      ]
    ],
    [
      'match' => [
        'attributes.value' => '3'
      ]
    ],
  ]
]

Я также пытался использовать фильтры:

'bool' => [
  'filter' => [
    [
      'match' => [
        'attributes.product_column_id' => 2
      ]
    ],
    [
      'match' => [
        'attributes.value' => '3'
      ]
    ],
  ]
]

Но все же я получаю все продукты, содержащие атрибуты со значением 4, без правильного product_column_id (он ищет термин "4" во всем значении поле не совпадает.

Я использую PHP / Laravel / Elasticquent для форматирования своих запросов, но это не должно иметь значения.

Может кто-нибудь сказать мне, как отформатировать запрос сопоставлять товары, содержащие атрибуты, которые соответствуют не только значению, но и product_column_id (и на будущее: language_code)?

Спасибо!

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