2014-09-04 2 views
1

У меня есть требование, чтобы иметь возможность считывать данные сразу по клавише после записи в ES. Это возможно? Обратите внимание, что DataMap - это пара ключевых значений, а _id - это ключевое поле.ElasticSearch: запрос данных сразу после записи

string v = "Foobar" + i; 
string k = Security.Hash(Encoding.UTF8.GetBytes(v)); 

var data = new DataMap { Key = k, Value = v }; 
var index = _esclient.Index(data); 

// fetch by k 
var results = _esclient.Search<DataMap>(p => p 
     .Size(1000) 
     .Fields(f => f.Key, f => f.Value) 
     .Query(q => q.Term("key", k)) 
     ); 

// Make sure the record is found 
if (!results.Hits.Any()) 
{ 
    Console.WriteLine("{0} {1} not found", k, v); 
} 

ответ

1

Да. API GET является realtime и возвращает документ по его _id сразу после его получения, даже если индекс еще не обновлен.

Обратите внимание, что вам может быть проще предоставить уникальный _id Elasticsearch, вместо того чтобы позволить ему сгенерировать его для вас. В противном случае вам нужно будет прочитать ответ от операции индексирования, чтобы узнать _id документа.

+0

Спасибо, Я использую «путь» не так же, как генерировать свой собственный id, так как _id ссылается на одно из моего свойства, которое уникально? Что эквивалентно GET API в библиотеке .Net NEST? – frosty

+0

извините, я сам не знаю библиотеку NEST, но я нашел эту документацию: http://nest.azurewebsites.net/nest/core/get.html – BenG

Смежные вопросы