я могу использовать preference для запроса ES осколка # 2 для чирикать документа с идентификатором 1
с URL, как это:Как запросить конкретный осколок для документа
GET twitter/tweet/1/_search?preference=_shards:2
Как я могу сделать это с помощью Java API?
EDIT Это:
GET /bookshop/book/_search?preference=_shards:0
перечисляет документ, а как ниже возвращает NPE:
GET /bookshop/book/id1?preference=_shards:0 //NPE
и
GetResponse getResponse = client()
.prepareGet(BOOK_INDEX_NAME, BOOK_TYPE_NAME, "id1")
.setPreference("_shards:0")
.execute().actionGet();
System.out.print(getResponse.getSource()); //HERE IS WHERE I GET THE NPE
EDIT 2:
Почему же тогда, если у меня есть только два осколка для этого показателя для
GET /bookshop/book/id1?preference=_shards:0
я NPE и
> GET /bookshop/book/id1?preference=_shards:1
я "нашел ложь":
{
"_index": "bookshop",
"_type": "book",
"_id": "id1",
"found": false
}
и
GET /bookshop/book/_search?preference=_shards:0
получает фактический документ с id1
и полным _source
?
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "bookshop",
"_type": "book",
"_id": "id1",
"_score": 1,
"_routing": "route1",
"_source": {
"title": "Clean COde",
"author": "John Smith"
}
}
]
}
}
EDIT3: Для:
GET /bookshop/book/id1?preference=_shards:0
я получаю следующее Быстродействие
{
"error": {
"root_cause": [
{
"type": "remote_transport_exception",
"reason": "[master-1][127.0.0.1:9304][indices:data/read/get[s]]"
}
],
"type": "null_pointer_exception",
"reason": null
},
"status": 500
}
Вы уверены, что нашли свой URL? Вы ссылаетесь на один документ (с id = 1) или вы хотите запустить поиск (например, '/ _search')? Вы не можете обойти оба. – Val
Я бы хотел найти один осколок для документа 'tweet' с заданным идентификатором. Это выполнимо? – mCs
Вам нужно удалить конечную точку '_search'. Я изменил свой ответ – Val