Elasticsearch NEST - документ сразу после индексации не найден - PullRequest
0 голосов
/ 06 сентября 2018

Я использую .NET NEST для поиска в Elasticsearch.

Когда я индексирую документ и сразу же ищу его, он не найден:

var node = new Uri("http://localhost:9200");
var settings = new ConnectionSettings(node);
settings.DefaultIndex("products_test");
settings.DisableDirectStreaming(true);
ElasticClient client = new ElasticClient(settings);

Product p = new Product("My Product", "6");
client.IndexDocument(p);

var results = client.Search<Product>(s => s.Query(q => q.MatchAll()));

results.HitsMetadata.Total //is 0 and results.Hits are empty

Почему?

Должен ли я как-то совершить?

Спасибо

РЕДАКТИРОВАТЬ: Но когда я снова запускаю консольное приложение и закомментирую создание, документ найден.

1 Ответ

0 голосов
/ 07 сентября 2018

Индексированный документ не доступен для поиска , пока документ не будет записан в сегмент сегмента индекса . Параметр индекса refresh_interval отвечает за то, как часто это происходит, по умолчанию он равен 1 секунде. Обратите внимание, что проиндексированный документ сразу же доступен после индексации и может быть получен по идентификатору.

При индексации документа вы можете указать, что обновление происходит после индексации, так что документ доступен для поиска после возврата ответа

var client = new ElasticClient();

client.Index(new MyDocument(1) { Message = "foo" }, i => i
    .Refresh(Refresh.WaitFor)
);

или вызов API обновления

client.Refresh("my-index");

Однако в производственной среде это обычно не рекомендуется делать, поскольку запись множества небольших сегментов будет оказывать большее влияние на производительность кластера в отношении ресурсов и операций объединения сегментов. Однако это может быть полезно для специальных целей и целей тестирования.

...