Как можно сделать следующий запрос
GET /giata_index/giata_type/_search/exists
{
"query": {
"bool": {
"must": [
{
"term": {
"status": 2
}
},
{
"term": {
"ids": "26744"
}
}
]
}
}
}
с библиотекой ElasticSearch PHP?
Я играл с существующей конечной точкой, но, как выясняется, это может только проверить, существует ли конкретный uid или нет. Поэтому, я думаю, мне нужно сделать поиск. Но я не могу найти параметр в белом списке конечных точек поиска, который позволил бы простую проверку наличия или нет.
Причина, по которой я хотел бы избежать получения всего документа и просто спросить, существует ли он или нет, потому что у меня есть несколько сотен тысяч импорта и столько же документов в ES, поэтому я бы хотел, чтобы он вложил в это немного работы насколько это возможно.
Примечание. Я также рассмотрел запросы главы, которые возможны через HTTP-запросы (только получить заголовок документа - 200 или 404). Но это, вероятно, существует только для запросов через HTTP.
Если худшее ухудшается, я могу застрелить с помощью php и просто сделать это через HTTP. Но я предпочел бы это иначе.
Кажется, действительно, нет никакой конечной точки для поиска, но я думаю, что вы используете простую альтернативу:
Используйте пустой массив полей. И подсчитайте результаты вашего запроса. Если == 0: false. Если> 0: true
GET /giata_index/giata_type/_search
{
"fields": [],
"query": {
"bool": {
"must": [
{
"term": {
"status": 2
}
},
{
"term": {
"ids": "26744"
}
}
]
}
}
}
Другой вариант - использовать _count: https://www.elastic.co/guide/en/elasticsearch/reference/1.6/search-count.html
Это должно быть возможно с последней версией 2.x. Пример кода может быть примерно таким:
$clientBuilder = Elasticsearch\ClientBuilder::create();
// Additional client options, hosts, etc.
$client = $clientBuilder->build();
$index = 'your_index';
$type = 'your_type';
$params = [
'index' => $index,
'type' => $type,
'body' => [
'query' => [
'bool' => [
'must' => [
[
'term' => [
"status" => 2
]
],
[
'term' => [
'ids' => "26744"
]
]
]
]
]
];
try {
$client->searchExists($params);
} catch (Exception $e) {
// Not found. You might want to return FALSE if wrapped in a function.
// return FALSE;
}
// Found.
Стоит отметить, что если поиск не завернут в блок try/catch, он может нарушить выполнение и выбросить исключение (код состояния 4xx, если не найден). Кроме того, он не может эффективно использоваться в будущем режиме.