【问题标题】:Why does my Nest method in controller create an index?为什么我在控制器中的 Nest 方法会创建索引?
【发布时间】:2021-04-04 15:18:30
【问题描述】:

我正在使用带有 asp.net mvc 的 net 6.0.1。

var node = new Uri("http://localhost:9200");
        var setting = new ConnectionSettings(node);
        var client = new ElasticClient(setting);

        var news = new News
        {
            NewsTitle = "TestTitle"
            
        };

        client.Index(news, idx => idx.Index("NewsTitle"));
        var response = client.Get<News>(1, idx => idx.Index("NewsTitle"));

ElasticSearch 已安装并正在运行,但是当我尝试运行这些代码行时,它什么也不做。没有创建索引。

【问题讨论】:

  • 您正在发出请求,然后解析响应。因此,根据请求参数确定您获得的 NewTitle 响应的数量。您可能只得到一个索引的一个响应。您可能需要更改请求以获得更多结果。

标签: c# asp.net elasticsearch model-view-controller nest


【解决方案1】:

有几点需要考虑

  1. client.Index(news, idx =&gt; idx.Index("NewsTitle")); 不检查索引文档请求的响应。

    检查响应是否成功是个好主意 - NEST 在所有响应中都有一个方便的.IsValid 属性 考虑响应是否有效的语义

  2. var response = client.Get&lt;News&gt;(1, idx =&gt; idx.Index("NewsTitle"));试图从"NewsTitle"索引中获取id为1的文档,但是刚刚索引的文档没有id,所以Elasticsearch在索引文档的时候会随机生成一个。

    NEST 有一个约定,如果要索引的 POCO 具有 Id 属性,它将使用它作为文档的 id。因此,如果将News 类修改为包含int Id 属性,并且为索引的实例分配了1 的Id 属性值,则get 请求将返回索引文档。

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多