Использование нескольких запросов следует - PullRequest
0 голосов
/ 06 мая 2018

Я хочу получить документы, похожие на несколько «групп», но отдельно. У каждой группы свои правила (термины). Когда я пытаюсь использовать более одного запроса «следует» внутри «bool», я получаю элементы, которые представляют собой сочетание обоих терминов «следует». Я хочу использовать всего 1 запрос, а не msearch, например.

Может кто-нибудь помочь мне с этим?

{
 "explain": true,
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must_not": [
            {
              "term": {
                "p_id": "123"
              }
            },
            {
              "term": {
                "p_id": "124"
              }
            }
          ]
        }
      },
      "query": {
        "bool": {
          "minimum_should_match": 1,
          "should": [
            {
              "bool": {
                "minimum_should_match": 1,
                "should": [
                  {
                    "term": {
                      "cat": "1"
                    }
                  },
                  {
                    "term": {
                      "cat": "2"
                    }
                  },

                  {
                    "term": {
                      "keys": "a"
                    }
                  },
                  {
                    "term": {
                      "keys": "b"
                    }
                  }
                ]
              }
            },
            {
              "bool": {
                "minimum_should_match": 1,
                "should": [
                  {
                    "term": {
                      "cat": "6"
                    }
                  },
                  {
                    "term": {
                      "cat": "7"
                    }
                  },
                  {
                    "term": {
                      "keys": "r"
                    }
                  },

                  {
                    "term": {
                      "keys": "u"
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    }
  },
  "from": 0,
  "size": 3
}

1 Ответ

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

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

 "aggs": {
    "Cat_and_Keys": {
      "terms": {
        "script": "doc['cat'].values + doc['keys'].values"
      }, 
      "aggs":{ "separate_docs": {"top_hits":{"size":1 }} }
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...