当前位置: 首页 > 知识库问答 >
问题:

在Nest 1.7.1中,Delete或DeleteByQuery不起作用

陈康胜
2023-03-14

在Nest 1.7.1中,Delete或DeleteByQuery对我来说都不起作用。

我试图删除以下文件:

Article article1 = new Article()
            {
                Id = 1111,
                Title = "Title - Test Elastic Search",
                Summary = "Summary - Test Elastic Search",
                Body = "Body - Test Elastic Search",
                ArticleDate = _dateToday,
                Author = new Author() { Id = 100, Name = "Mikey" },
            };

Article article2 = new Article()
            {
                Id = 2222,
                Title = "Title - Test Elastic Search",
                Summary = "Summary - Test Elastic Search",
                Body = "Body - Test Elastic Search",
                ArticleDate = _dateToday,
                Author = new Author() { Id = 100, Name = "Mikey" },
                Published = true
            };
_elasticClient.DeleteByQuery<Article>(q => q.Query(t => t.Term(m => m.OnField(f => f.Id).Value(articleId))))
                                      .Found;


_elasticClient.DeleteByQuery<Article>(q => q.MatchAll()).IsValid;

共有1个答案

公西修文
2023-03-14

下面是一个工作示例

void Main()
{
    var settings = new ConnectionSettings(new Uri("http://localhost:9200"), "articles");
    var client = new ElasticClient(settings);

    if (client.IndexExists("articles").Exists)
    {
        client.DeleteIndex("articles");
    }

    client.CreateIndex("articles", c => c
        .AddMapping<Article>(m => m
            .MapFromAttributes()
        )
    );

    var today = DateTime.Now.Date;

    var article1 = CreateArticle(1111, today);
    var article2 = CreateArticle(2222, today);
    var article3 = CreateArticle(3333, today);
    var article4 = CreateArticle(4444, today);

    var bulkRequest = new BulkDescriptor();
    bulkRequest.Index<Article>(i => i.Document(article1));
    bulkRequest.Index<Article>(i => i.Document(article2));
    bulkRequest.Index<Article>(i => i.Document(article3));
    bulkRequest.Index<Article>(i => i.Document(article4));
    bulkRequest.Refresh();

    client.Bulk(bulkRequest);

    var searchResponse = client.Search<Article>(q => q.MatchAll());

    Console.WriteLine("Documents from search: {0}. Expect 4", searchResponse.Documents.Count());

    client.Delete(article1, d => d.Refresh());

    searchResponse = client.Search<Article>(q => q.MatchAll());
    Console.WriteLine("Documents from search {0}. Expect 3", searchResponse.Documents.Count());

    client.Delete(article2, d => d.Refresh());

    searchResponse = client.Search<Article>(q => q.MatchAll());
    Console.WriteLine("Documents from search {0}. Expect 2", searchResponse.Documents.Count());

    client.DeleteByQuery<Article>(q => q.MatchAll());

    searchResponse = client.Search<Article>(q => q.MatchAll());
    Console.WriteLine("Documents from search {0}. Expect 0", searchResponse.Documents.Count());

}

private Article CreateArticle(int id, DateTime articleDate)
{
    return  new Article()
    {
        Id = id,
        Title = "Title - Test Elastic Search",
        Summary = "Summary - Test Elastic Search",
        Body = "Body - Test Elastic Search",
        ArticleDate = articleDate,
        Author = new Author() { Id = 100, Name = "Mikey" },
        Published = true
    };
}

public class Article
{
    public int Id { get; set;}
    public string Title{ get; set;}
    public string Summary { get; set;}
    public string Body { get; set;}
    public DateTime ArticleDate { get; set; }
    public Author Author { get; set; }
    public bool Published { get; set;}
}

public class Author
{
    public int Id { get; set; }
    public string Name { get; set;}
}

中的结果

Documents from search: 4. Expect 4
Documents from search 3. Expect 3
Documents from search 2. Expect 2
Documents from search 0. Expect 0

不出所料。

需要记住的一点是,Elasticsearch最终是一致的,这意味着被索引的文档直到刷新间隔(默认为1秒)后才出现在搜索结果中;同样,对于删除查询,标记为删除的文档将出现在搜索结果中,直到刷新间隔过去。

但是,对于具有给定id的给定文档的GET请求将在刷新间隔之前返回该文档。

如果需要文档是可搜索的(或者删除后不显示在搜索结果中),可以在操作后刷新索引,就像我在上面对bulk和delete调用所做的那样,使用.refresh()。您可能会在每次操作后调用refresh,但是我建议只在真正需要时使用它,因为它会增加集群的开销,并且一直调用可能会降低性能。

 类似资料:
  • 问题内容: 我需要添加一个表的2个单元格内容并显示它。下面的JavaScript命令在chrome或IE10中可以正常工作。 但不能在IE8或7中使用 。 结果, N 您能否告诉我 IE7或IE8中 的 等效命令 是什么 , 以读取表的单元格内容并将其转换为float然后添加。 问题答案: IE7 /8不支持textContent。后者具有称为innerText的不同属性,该属性返回DOM节点的文

  • 我正在用spring做一个rest API来做crud操作。在我的angular应用程序中,删除HTTP客户端不起作用,当我单击删除按钮时,选定的id不会被删除。我知道我的服务器正在运行,并且控制器代码是正确的。 这是员工列表.组件. ts 这是服务页面- employee.service.ts 下面是按钮如何绑定到employee-list.component.html中的deleteClae(

  • 对不起,如果这是一个愚蠢的问题,但我导入了一个字体存储在我的电脑到一个CSS文件,虽然它在Chrome工作,但它不在Microsoft Edge或Internet Explorer。我没有任何其他浏览器,所以我不能检查那些,我想知道是否有人会知道为什么。 当我进入sources时,这是显示的(还不让我嵌入图像,我很新):sources Linotte文件夹所在的文件夹与CSS工作表所在的文件夹在同

  • 我在Firefox48.0中从Firefox47的新更新中得到一个错误 45000 ms后,无法在端口7055上连接到主机127.0.0.1。Firefox控制台输出:066 addons.xpi调试更新数据库,更改已安装的加载项 我的系统和浏览器配置是: Firefox 48

  • 问题内容: 我有以下代码: 不幸的是,当被调用时,该点并没有显示,但是我仍然得到了。我尝试单独设置一个新线程,但无济于事。我尝试了其他解决方案(和),但也无济于事。 我的目标是在屏幕上设置一个绿点。你有什么解决办法吗? 问题答案: 您正在阻止Swing事件线程使应用程序进入睡眠状态。 对于简单的动画和游戏循环,请使用Swing计时器。如果需要长时间运行的代码需要在后台运行,请使用后台线程(例如Sw

  • 问题内容: 我有一个简单的设置,可以加载“帮助”样式的窗口并将其滚动到页面上的特定点。或多或少的代码看起来像这样: 滚动的目标和软糖的值由放置在页面上的几个提示确定,我对该机制的任何部分都没有问题。在Firefox和IE8中,上述代码的工作方式与我想要的完全一样:滚动框(在本例中为页面正文)在被告知这样做时,会将包含的内容正确滚动到窗口中的正确点。 但是,在Chrome和Safari中,对scro