ElasticSearch Nested Query не работает должным образом - PullRequest
0 голосов
/ 03 мая 2018

Мне нужна быстрая помощь, мне нужно получить весь документ, только когда мои условия выполняются в том же массиве.

* ** 1003 тысяча два * Пример

Условия, когда в одном блоке массива выполняются все эти три условия. т.е.

  • "profile.bud.buddies.code": "1"
  • "profile.bud.buddies.moredata.key": "one"
  • "profile.bud.buddies.moredata.val": "0"

К сожалению, сейчас он просматривает весь документ и пытается сопоставить значения в каждом из этих массивов, чтобы могло быть так, чтобы code = 1 совпадал в одном массиве, key = один в каком-то другом массиве и val = 0 в третьем массиве. Что происходит, в этом случае он возвращает мне весь документ, тогда как на самом деле это не было выполнено в одном массиве, поэтому не должен был возвращать мне документ.

Я сделал moredata как вложенный тип, но все еще не могу пройти. Пожалуйста, помогите.

Запрос, который я использую </p> <pre><code>"query": { "bool": { "should": [ { "match": { "profile.bud.buddies.code": "1" } } ] }, "nested": { "path": "profile.bud.buddies.moredata", "query": { "bool": { "must": [ { "match": { "profile.bud.buddies.moredata.key": "one" } }, { "match": { "profile.bud.buddies.moredata.val": "0" } } ] } } } }

Структура документа </p> <pre><code>"profile": { "x":{}, "y":{}, "a":{}, "b":{}, "bud":{ "buddies": [ { "code":"1", "moredata": [ { "key": "one", "val": 0, "setup": "2323", "data": "myid" }, { "key": "two", "val": 1, "setup": "23", "data": "id" }] }, { "code":"2", "moredata": [ { "key": "two", "val": 0, "setup": "2323", "data": "myid" }, { "key": "three", "val": 1, "setup": "23", "data": "id" }] }] }

Вот как я пометил отображения;

</p> <pre><code>"profile": { "bug": { "properties": { "buddies": { "properties": { "moredata": { "type": "nested", "properties": { "key": {"type": "string"}, "val": {"type": "string"}

1 Ответ

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

Ваша структура запроса неверна, это должно быть что-то вроде

"query": {
  "bool": {
    "must": [{
        "match": {
          "profile.bud.buddies.code": "1"
        }
      },
      {
        "nested": {
          "path": "profile.bud.buddies.moredata",
          "query": {
            "bool": {
              "must": [{
                  "match": {
                    "profile.bud.buddies.moredata.key": "one"
                  }
                },
                {
                  "match": {
                    "profile.bud.buddies.moredata.val": "0"
                  }
                }
              ]
            }
          }
        }
        ]
    }
  }
}

, где запрос nested находится внутри массива предложений must внешнего запроса bool. Обратите внимание, что profile.bud.buddies.moredata должен отображаться как тип данных nested.

...