如何在 Elasticsearch 7 NEST 7 中设置 "max_result_window"

How to set "max_result_window" in Elasticsearch 7 NEST 7

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

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

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

现在我需要在我的源代码中创建索引时包含此设置code.But我找不到执行此操作的方法。 这是我的索引创建函数。我应该如何设置“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";
            }
        }

我不知道 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

中创建成功

获取 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"
                }
            }
        }
    }
}

您可以使用以下代码段创建具有 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)));