当前位置: 首页 > 面试题库 >

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

慕容玉堂
2023-03-14
问题内容

我想使用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类的Name字段上创建自动完成索引。

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")
                    )
                )
            )
        )
    )
);

在github上的NEST的单元测试项目中,还有一个相当完整的映射示例。
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)
        )
    )
);


 类似资料:
  • 问题内容: 我们的MySql表有2500万行 以下是表中的列 以上我们在c_id,c_name,s_id,l_type,域列上具有正常索引 我打算在域,l_time,l_type列上添加复合索引。因此,现在我可以删除域上的单个索引了吗? 谢谢 问题答案: 复合索引的任何前缀也将单独用作索引。因此,如果您有一个复合索引,则相当于在和上都有索引。无需分别将这些索引分开,它们将是多余的并且浪费空间。 因

  • 当你要在 Elasticsearch 增加文档时,你就需要索引 JSON 文档。JSON 文档会映射 PHP 关联数组,因为 PHP 关联数组可以 encode 为 JSON 数据格式。 因此在 Elasticsearch-PHP 中你可以传递关联数组给客户端来索引文档。我们会概述几种方法来增加文档到 Elasticsearch。 单一文档索引 当索引一个文档时,你可以提供一个 ID 或者让 El

  • 前端构建工具指的是coolie-cli,基于 nodejs,是系统工具,安装之后会注册全局命令coolie。 工具全部源码均已开源(仓库:https://github.com/cooliejs/coolie-cli)。 coolie-cli 是前端构建工具,是前端工程化解决方案,不是编译工具 (常见问题:什么是编译,什么是构建)。 全局命令 ➜ coolie

  • 我正在尝试构建复杂的JSON对象嵌套数组。我正在努力使用JOLT获得我期望的结构。任何帮助都将不胜感激。 我正试图从appspot上理解JOLT,但对于我来说,很难理解对数据集进行递归迭代。 即使数组中有 1000 个对象,“JobId”也应该与毫秒相同,这就是为什么我一次生成“JobId”而不是在每个对象中并尝试在下一次迭代中移动到正确的位置失败的原因。 输入的 JSON 为: 到目前为止,我想

  •   a   rt_alarm_container    rt_i2c_bus_device    rt_pm_ops    rt_timer    rt_alarm_setup    rt_i2c_bus_device_ops    rt_pwm_configuration    rt_uart_ops    addrinfo    rt_completion    rt_i2c_msg    r

  • 本文向大家介绍MongoDB中创建索引需要注意的事项,包括了MongoDB中创建索引需要注意的事项的使用技巧和注意事项,需要的朋友参考一下 上周在 ruby-china 上发了帖子《MongoDB 那些坑》,反映相当热烈,许多回复很有见地,其中一位童鞋深入的提到 MongoDB 建索引方法的问题,引发我更深入的了解了 MongoDB 建索引的方法和一些注意事项。 在 《MongoDB 那些坑》中提