gpt4 book ai didi

elasticsearch - 需要使用 NEST ElasticSearch 库构建复杂索引的具体文档/示例

转载 作者:行者123 更新时间:2023-11-29 02:48:06 24 4
gpt4 key购买 nike

我想使用 NEST 库的 Fluent 界面创建索引,其中涉及设置自定义过滤器、分析器和类型映射。我想避免使用特定于 NEST 的注释来装饰我的类。

我在 http://nest.azurewebsites.net/indices/create-indices.html 看到了文档和 http://nest.azurewebsites.net/indices/put-mapping.html .该文档虽然展示了一些示例,但不够完整,无法帮助我了解如何使用 Fluent API 构建一些复杂的索引场景。

我在 http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ 找到了教程很有帮助;在本教程中展示如何通过 NEST Fluent 界面代替直接 JSON 构建过滤器、分析器和映射的一些代码将是对这个问题的一个很好的答案。

最佳答案

您的问题越具体,您得到的答案就越好。不过,这里有一个索引,它设置了一个分析器(带有过滤器)和分词器 (EdgeNGram),然后使用它们在 Tag 类的名称字段上创建一个自动完成索引。

public class Tag
{
public string Name { get; set; }
}

Nest.IElasticClient client = null; // Connect to ElasticSearch

var createResult = client.CreateIndex(indexName, index => index
.Analysis(analysis => analysis
.Analyzers(a => a
.Add(
"autocomplete",
new Nest.CustomAnalyzer()
{
Tokenizer = "edgeNGram",
Filter = new string[] { "lowercase" }
}
)
)
.Tokenizers(t => t
.Add(
"edgeNGram",
new Nest.EdgeNGramTokenizer()
{
MinGram = 1,
MaxGram = 20
}
)
)
)
.AddMapping<Tag>(tmd => tmd
.Properties(props => props
.MultiField(p => p
.Name(t => t.Name)
.Fields(tf => tf
.String(s => s
.Name(t => t.Name)
.Index(Nest.FieldIndexOption.not_analyzed)
)
.String(s => s
.Name(t => t.Name.Suffix("autocomplete"))
.Index(Nest.FieldIndexOption.analyzed)
.IndexAnalyzer("autocomplete")
)
)
)
)
)
);

NEST在github上的单元测试项目中也有一个比较完整的映射示例。 https://github.com/elasticsearch/elasticsearch-net/blob/develop/src/Tests/Nest.Tests.Unit/Core/Map/FluentMappingFullExampleTests.cs

编辑:

要查询索引,请执行以下操作:

string queryString = ""; // search string
var results = client.Search<Tag>(s => s
.Query(q => q
.Text(tq => tq
.OnField(t => t.Name.Suffix("autocomplete"))
.QueryString(queryString)
)
)
);

关于elasticsearch - 需要使用 NEST ElasticSearch 库构建复杂索引的具体文档/示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19519449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com