Значения группы эластичного поискового фильтра - PullRequest
1 голос
/ 18 мая 2019

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

{
 doc_id: 1,
 color: "red",
 timestamp: epoch time here
},
{
 doc_id: 2,
 color: "blue",
 timestamp: epoch time here
}

Так. Например, если какой-либо документ с атрибутом color (отныне именуемый просто цветом) появился в прошлом году, но не появился в последние 3 месяца, тогданам нужно включить синий в результате.С другой стороны, если документы с красным цветом появились в прошлом году и также появились за последние 3 месяца, то нам нужно исключить красный из результата.

1 год в приведенном выше примере также включает 3 месяца вэто при вычислении.Таким образом, если все документы с синим цветом произошли только в период с мая 2018 года по февраль 2019 года, это означает, что документы с синим цветом произошли в прошлом году, но пропали без вести в последние 3 месяца (март 2019 года - май 2019 года), тогда синий цвет должен быть в наборе результатов,С другой стороны, если документы с красным цветом имели место в период с мая 2018 года по февраль 2019 года, а также с марта 2019 года по май 2019 года, то нам нужно исключить этот красный цвет в наборе результатов.Я не мог получить это с запросом условий в Упругом поиске.

1 Ответ

1 голос
/ 19 мая 2019

Я выбрал диапазон от "2019-01-01" - "2019-12-30", с исключенными месяцами как "2019-09-01" - "2019-12-30"

Mapping :
{
  "testindex" : {
    "mappings" : {
      "properties" : {
        "color" : {
          "type" : "keyword"
        },
        "doc_id" : {
          "type" : "long"
        },
        "timestamp" : {
          "type" : "date"
        }
      }
    }
  }
}

Данные:

"hits" : [
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "GPv0zWoB8AL5aj8D_wLG",
        "_score" : 1.0,
        "_source" : {
          "doc_id" : 1,
          "color" : "blue",
          "timestamp" : "2019-03-30"
        }
      },
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "Gfv1zWoB8AL5aj8DJAKU",
        "_score" : 1.0,
        "_source" : {
          "doc_id" : 1,
          "color" : "red",
          "timestamp" : "2019-12-30"
        }
      },
      {
        "_index" : "testindex",
        "_type" : "_doc",
        "_id" : "Gvv1zWoB8AL5aj8DOwKf",
        "_score" : 1.0,
        "_source" : {
          "doc_id" : 1,
          "color" : "red",
          "timestamp" : "2019-01-01"
        }
      }
    ]
  }

Окончательный запрос:

GET testindex/_search
{
  "size": 0,
  "query": {
    "range": {
      "timestamp": {
        "gte": "2019-01-01",
        "lte": "2019-12-30"
      }
    }
  },
  "aggs": {
    "colors": {
      "terms": {
        "field": "color"
      },
      "aggs": {
        "excluded_range": {
          "date_range": {
            "field": "timestamp",
            "ranges": [
              {
                "from": "2019-09-01",
                "to": "2019-12-31"
              }
            ]
          }
        },
        "excluded_docs_count": {
          "sum_bucket": {
            "buckets_path": "excluded_range>_count"
          }
        },
        "myfinal": {
          "bucket_selector": {
            "buckets_path": {
              "out_of_range_docs": "excluded_docs_count"
            },
            "script": {
              "inline": "params.out_of_range_docs==0"
            }
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...