Запрос для эластичных поисковых агрегаций на основе вложенного массива - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть документы, подобные приведенным ниже, в моем индексе

{
      "bookName" : "coolbook",
      "timeStamp" : "2018-11-19T12:52:17.000Z",
      "referenceId" : "auth_test_01_01_000004",
      "peoplestatus" : [
        {
          "personId" : "p1",
          "status" : "like"
        },
        {
          "personId" : "p2",
          "status" : "dislike"
        },{
          "personId" : "p3",
          "status" : "netrual"
        }
      ]
    }

Теперь я хочу запросить агрегацию количества книг для человека p1, p2, например, ниже количества книг

  1. нравится p1, но не нравится p2
  2. p1, p2 оба нравятся
  3. не нравится p2, но нравится p1
  4. p1, b2 оба не нравятся

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 22 ноября 2018

Поскольку для каждого сегмента требуются группы с разными фильтрами, агрегация фильтров лучше всего подходит для этого.В соответствии с вашим комментарием будут сравниваться два идентификатора человека. Ниже приведен запрос для следующих двух комбинаций:

  • P1 понравился, но P2 не понравился
  • P1 и P2 оба понравились


    {
      "query": {
        "match_all": {}
      },
      "aggs": {
        "books": {
          "filters": {
            "filters": {
              "P1L_P2DL": {
                "bool": {
                  "must": [
                    {
                      "nested": {
                        "path": "peoplestatus",
                        "query": {
                          "bool": {
                            "must": [
                              {
                                "bool": {
                                  "must": [
                                    {
                                      "term": {
                                        "peoplestatus.personId": "p1"
                                      }
                                    },
                                    {
                                      "term": {
                                        "peoplestatus.status": "like"
                                      }
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        }
                      }
                    },
                    {
                      "nested": {
                        "path": "peoplestatus",
                        "query": {
                          "bool": {
                            "must": [
                              {
                                "bool": {
                                  "must": [
                                    {
                                      "term": {
                                        "peoplestatus.personId": "p2"
                                      }
                                    },
                                    {
                                      "term": {
                                        "peoplestatus.status": "dislike"
                                      }
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "L1N3": {
                "bool": {
                  "must": [
                    {
                      "nested": {
                        "path": "peoplestatus",
                        "query": {
                          "bool": {
                            "must": [
                              {
                                "bool": {
                                  "must": [
                                    {
                                      "term": {
                                        "peoplestatus.personId": "p1"
                                      }
                                    },
                                    {
                                      "term": {
                                        "peoplestatus.status": "like"
                                      }
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        }
                      }
                    },
                    {
                      "nested": {
                        "path": "peoplestatus",
                        "query": {
                          "bool": {
                            "must": [
                              {
                                "bool": {
                                  "must": [
                                    {
                                      "term": {
                                        "peoplestatus.personId": "p2"
                                      }
                                    },
                                    {
                                      "term": {
                                        "peoplestatus.status": "like"
                                      }
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "size": 0
    }


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