2016-06-01 1 views
1

Я переиндексирую свой индекс, но при попытке удалить несуществующий документ я столкнулся с проблемой, поэтому мне нужно проверить, существует ли этот документ уже.Проверка наличия документа в индексе с использованием NEST

Подход только что разъяснен в elasticsearch docs.

a question Я нашел несколько интересных кода, который я уже пытался

var docExists = client.DocumentExists<object>(d => d 
    .Index(indexname) 
    .Id(myId) 
    .Type("Abcdef")); 

Но компилятор дает ошибку

Невозможно преобразовать лямбда-выражения к типу «Nest.DocumentPath < объект >» потому что он не является делегатом типа

Я полагаю, моя ошибка com потому что вопрос относится к NEST 1.x, и я использую NEST 2.x.

Я знаю, что могу сделать простой запрос, но я хочу знать, есть ли прямой способ, например, ES doc-exists.

Благодаря

+0

Какой версию Nest вы используете? – bittusarkar

+0

@bittusarkar Elasticsearch 2.0.0, Nest 2.0.2 –

ответ

3

Подпись DocumentExists немного изменилось в НЕСТ 2.x.

Прямо сейчас это выглядит следующим образом:

public IExistsResponse DocumentExists<T>(DocumentPath<T> document, Func<DocumentExistsDescriptor<T>, IDocumentExistsRequest> selector = null) where T : class 

Ваш пример может быть выражено следующим образом

client.DocumentExists<Document>(myId, d => d 
    .Index(indexname) 
    .Type("Abcdef")); 

Если Вам интересно DocumentPath<T>, пожалуйста, прочитайте this большой мир NEST Docs.

+0

Спасибо! Я получил это решение, хотя 'client.DocumentExists (новый DocumentExistsRequest (indexName, type.Name, myId)), поскольку я не мог использовать общий метод –

0

Я закончил с использованием

client.DocumentExists(new DocumentExistsRequest(indexName, type.Name, myId)) 

как я не мог использовать общий метод DocumentExists<T>(..)

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