- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我们允许客户在创建索引时定义自定义分析器。我们更愿意在 json 中指定它,以通过底层 ElasticSearch 文档提供最大的灵 active 和可理解性。
我想使用在 json 字符串中定义的分析器、映射器等的任意描述来创建索引。使用sense,我的命令是
PUT /my_index
{
"settings":
{
"analysis":
{
"char_filter" :
{
"my_mapping" :
{
"type" : "mapping",
"mappings" : [".=>,", "'=>,"]
}
},
"analyzer":
{
"my_analyzer":
{
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase" ],
"char_filter" : ["my_mapping"]
}
}
}
}
}
}
理想情况下,我的代码应该是这样的
string json = RetrieveJson();
ElasticSearchClient client = InitializeClient();
client.CreateIndexUsingJson( json ); // this is the syntax I can't figure out
帖子here尝试通过实例化 IndexSettings 然后调用 Add( "analysis", json ) 来执行此操作,但 Add 不是我正在使用的 ElasticSearch 库版本上的函数。
我能想到的选项包括:
这两种机制的文档都很少。
我绝对想避免使用 CreateIndex 的 lambda 函数版本,因为将用户的 json 转换为 lamdba 表达式会很痛苦,只是立即将它们转换回 NEST 深处的 json。
非常感谢上面#1 或#2 的其他选项或具体示例,这是解决此问题的推荐方法。
最佳答案
最简单的解决方案是实现原始问题中的选项 #1。
public void CreateIndex(string indexName, string json)
{
ElasticClient client = GetClient();
var response = _client.Raw.IndicesCreatePost(indexName, json);
if (!response.Success || response.HttpStatusCode != 200)
{
throw new ElasticsearchServerException(response.ServerError);
}
}
在修改转换器和 JsonReaders 以及 JsonSerializers 之后,我发现 IndexSettingsConverter 似乎没有将任意设置 json 正确反序列化为有效的 IndexSettings 对象。感觉到一个兔子洞,我采纳了 Manolis 的建议并想出了如何将任意 json 直接应用于 ElasticClient.IElasticsearchClient 以避免必须对安全性和连接细节进行逆向工程。
要得出这个结论需要付出艰苦的努力,如果不研究大量未记录的 NEST 代码,这是完全不可能的。
关于c# - Elasticsearch 嵌套 : Create an index through ElasticClient by specifying json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29026007/
这是我们过去用来ping Elastic Search节点的代码段,只是用来检查它是否存在: Nest.ElasticClient client; // has been initialized Co
我正在使用ElasticClient 2.4.4。 我有一个查询 var sample = client.Search(s => s .Query(q =>
起初我有 1 个索引,我的弹性客户端在我的 startup.cs 中设置如下 public static IServiceCollection AddElasticClient(this IServi
更新到NEST 0.11.5后,似乎不再支持NEST.ElasticClient.MapRaw和.CreateIndexRaw方法。它们是否已被重命名或移动或完全消失了? 万一它们消失了,我如何在创建
如何在 .NET Core 应用程序中将 ElasticClient 注册为单例,但仍然能够在查询期间指定不同的索引? 例如: 在 Startup.cs 中,我将弹性客户端对象注册为单例,仅提及 UR
我正在尝试通过单元测试分析代码覆盖率,我目前正在使用 Moq 库执行单元测试,不知何故我走错了路,想知道以下场景是否适用于使用 Moq 下面是一段代码 public interface ISearch
我们目前正在创建 olivere我们 API 中的弹性客户端如下所示: elasticClient, err = elastic.NewClient( elas
我们允许客户在创建索引时定义自定义分析器。我们更愿意在 json 中指定它,以通过底层 ElasticSearch 文档提供最大的灵 active 和可理解性。 我想使用在 json 字符串中定义的分
我正在按照示例学习 ElasticSearch elasticsearch-net-example .错误发生在以下代码中: foreach (var package in packa
我是一名优秀的程序员,十分优秀!