使用NEST检查索引中是否存在文档

时间:2016-06-01 14:58:24

标签: c# elasticsearch elasticsearch-2.0 nest2

我正在重新索引索引,但每次尝试删除不存在的文档时都遇到了问题,所以我需要检查文档是否已经存在。

该方法刚刚在elasticsearch docs中解释。

我发现a question有一些有趣的代码,我已经尝试了

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

但编译器发出错误

  

无法将lambda表达式转换为'Nest.DocumentPath&lt; object&gt;'类型因为它不是委托类型

我想我的错误是因为问题是指NEST 1.x而我正在使用NEST 2.x.

我知道我可以做一个简单的查询,但我想知道是否有像ES doc-exists这样的直接方法。

由于

2 个答案:

答案 0 :(得分:3)

DocumentExists的签名在NEST 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的伟大和平。

答案 1 :(得分:1)

我最终使用

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

因为我无法使用通用方法DocumentExists<T>(..)