ElasticSearch: ограничить агрегаты строкой запроса - PullRequest
0 голосов
/ 31 января 2019

Я изо всех сил стараюсь, чтобы мои агрегаты были ограничены моим запросом.Я, конечно, попробовал:

{
    "_source": ["burger.id", "burger.user_name", "burger.timestamp"],
    "query": {
        "query_string": {
            "query": "burger.user_name:Bob"
        }
    },
    "aggs": {
        "burger_count": {
            "cardinality": {
                "field": "burger.id.keyword"
            }
        },
        "min_dtm": {
            "min": {
                "field": "burger.timestamp"
            }
        },
        "max_dtm": {
            "max": {
                "field": "burger.timestamp"
            }
        }
    }
}

Я очень настроен на использование «query_string» для фильтрации, поскольку у нас есть очень хороший интерфейс, который позволяет пользователям легко создавать запросы, которые затем превращаются в"query_string."

К сожалению, я не нашел способа объединить query_string и агрегации, чтобы агрегации были только по результатам запроса!

Я прочитал Многие ТАК сообщения об этом, но все они очень старые и устаревшие, поскольку все они предлагают устаревший способ отфильтрованных запросов, но даже это не реализует query_string.

UPDATE

Вот несколько примеров документов.Похоже, мои результаты не фильтруются по моему запросу.Есть ли параметр, который мне не хватает?Я также изменил все поля, чтобы быть о гамбургерах ...

{
    "_index": "burgers",
    "_type": "burger",
    "_id": "123",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "1",
        "user_name": "Jonathan",
        "timestamp": 1541521691847
      }
    }
  },
  {
    "_index": "burgers",
    "_type": "burger",
    "_id": "456",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "2",
        "user_name": "Ryan",
        "timestamp": 1542416601153
      }
    }
  },
  {
    "_index": "burgers",
    "_type": "burger",
    "_id": "789",
    "_score": 5.3759894,
    "_source": {
      "inference": {
        "id": "3",
        "user_name": "Grant",
        "timestamp": 1542237715511
      }
    }
  }

1 Ответ

0 голосов
/ 04 февраля 2019

нашел мой ответ!Похоже, что проблема была вызвана запросом поля text для burger.user_name вместо поля keyword : burger.user_name.keyword.Изменение моей строки запроса для использования ключевого слова для каждого текстового поля решило мою проблему.

{
    "_source": ["burger.id", "burger.user_name", "burger.timestamp"],
    "query": {
        "query_string": {
            "query": "burger.user_name.keyword:Bob"
        }
    },
    "aggs": {
        "burger_count": {
            "cardinality": {
                "field": "burger.id.keyword"
            }
        },
        "min_dtm": {
            "min": {
                "field": "burger.timestamp"
            }
        },
        "max_dtm": {
            "max": {
                "field": "burger.timestamp"
            }
        }
    }
}

Этот SO-ответ дает отличный, краткийобъяснение почему.

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