【问题标题】:How to set "max_result_window" in Elasticsearch 7 NEST 7如何在 Elasticsearch 7 NEST 7 中设置“max_result_window”
【发布时间】:2021-01-13 16:54:14
【问题描述】:

在默认的弹性搜索中,只返回 10k 个结果。但我需要转到超过 10k 个结果的最后一页。

我做了一些尝试,并通过设置 "max_result_window" : 100000 找到了解决方案 我在 Kibana 中执行它,甚至超过 5000 页在此设置后工作正常。

PUT jm-stage-products/_settings
{ 
  "max_result_window" : 100000 
}

现在,当我在源代码中创建索引时,我需要包含此设置。但我找不到这样做的方法。 这是我的索引创建功能。我应该如何设置“max_result_window”:100000?

  public string InitIndexing()
        {
            var indexName = string.Format(_config.ElasticIndexName, _config.HostingEnvironment);

            //-----------------------------------------------------------
            if (!_client.Indices.Exists(indexName).Exists)
            {
                //----------------------------------------------
                var indexSettings = new IndexSettings
                {
                    NumberOfReplicas = 0, // If this is set to 1 or more, then the index becomes yellow.
                    NumberOfShards = 5,                  
                };
             
                var indexConfig = new IndexState
                {
                    Settings = indexSettings
                };
                var createIndexResponses = _client.Indices.Create(indexName, c => c
                                          .InitializeUsing(indexConfig)                      
                                         .Map<ElasticIndexGroupProduct>(m => m.AutoMap())
               );
                return createIndexResponses.DebugInformation;
            }
            else
            {
                return $"{_config.ElasticIndexName} already exists";
            }
        }

【问题讨论】:

    标签: elasticsearch .net-core nest


    【解决方案1】:

    您可以使用以下代码 sn-p 使用max_result_window 设置创建索引:

    var createIndexResponse = await elasticClient.Indices.CreateAsync("index_name", c => c
        .Settings(s => s
            .Setting(UpdatableIndexSettings.MaxResultWindow, 100000)))
    

    可以使用这种流畅的语法更新已经存在的索引:

    await elasticClient.Indices.UpdateSettingsAsync("index_name", s => s
        .IndexSettings(i => i.Setting(UpdatableIndexSettings.MaxResultWindow, 100000)));
    

    【讨论】:

      【解决方案2】:

      我不知道nest,但在创建索引和 下面是展示这一点的 REST API。

      PUT HTTP://localhost:9200/your-index-name/

      {
          "settings": {
              "max_result_window" : 1000000 // note this
          },
          "mappings": {
              "properties": {
                  "first_name": {
                      "type": "text"
                  },
                  "last_name": {
                      "type": "text"
                  },
                  "country": {
                      "type": "text"
                  },
                  "state": {
                      "type": "text"
                  },
                  "city": {
                      "type": "text"
                  }
              }
          }
      }
      

      在 index-settings 中检查是否创建成功

      GET HTTP://localhost:9200/your-index-name/_settings

      {
          "so_1": {
              "settings": {
                  "index": {
                      "number_of_shards": "1",
                      "provided_name": "so_1",
                      "max_result_window": "1000000", // note this
                      "creation_date": "1601273239277",
                      "number_of_replicas": "1",
                      "uuid": "eHBxaGf2TBG9GdmG5bvwkQ",
                      "version": {
                          "created": "7080099"
                      }
                  }
              }
          }
      }
      

      【讨论】:

      • 是的.. 这是有效的。我已经试过了。但我需要使用 NEST 7 来实现它。
      猜你喜欢
      • 2020-09-19
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      相关资源
      最近更新 更多