NEST - 索引单个字段

use*_*523 2 c# elasticsearch nest

我正在我的网站上转换到ElasticSearch,并使用NEST作为我的C#.NET接口.

在编写代码来索引我的内容时,我无法弄清楚如何单独映射字段.假设我有以下内容:

var person = new Person
{
    Id = "1",
    Firstname = "Martijn",
    Lastname = "Laarman",
    Email = "Martijn@gmail.com",
    Posts = "50",
    YearsOfExperience = "26"

};
Run Code Online (Sandbox Code Playgroud)

而不是使用以下内容索引整个数据集:

var index = client.Index(person);
Run Code Online (Sandbox Code Playgroud)

我想索引FirstName和LastName以便可以搜索它们,但我不需要其他字段在索引中(ID除外)因为它们只占用空间.任何人都可以帮助我使用代码来单独映射这些字段吗?

Gre*_*uka 6

最初创建索引时应添加映射.一种方法是在类上使用NEST属性,如下所示:

public class Person
{
    public string Id { get; set; }

    public string Firstname { get; set; }

    public string Lastname { get; set; }

    [ElasticProperty(Store=false, Index=FieldIndexOption.not_analyzed)]
    public string Email { get; set; }

    [ElasticProperty(Store = false, Index = FieldIndexOption.not_analyzed)]
    public string Posts { get; set; }

    [ElasticProperty(Store = false, Index = FieldIndexOption.not_analyzed)]
    public string YearsOfExperience { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后你会像这样创建你的索引:

client.CreateIndex("person", c => c.AddMapping<Person>(m => m.MapFromAttributes()));
Run Code Online (Sandbox Code Playgroud)

您也可以显式映射每个字段,而不是使用属性:

client.CreateIndex("person", c => c.AddMapping<Person>(m => m
    .MapFromAttributes()
    .Properties(props => props
        .String(s => s.Name(p => p.Email).Index(FieldIndexOption.not_analyzed).Store(false))
        .String(s => s.Name(p => p.Posts).Index(FieldIndexOption.not_analyzed).Store(false))
        .String(s => s.Name(p => p.YearsOfExperience).Index(FieldIndexOption.not_analyzed).Store(false)))));
Run Code Online (Sandbox Code Playgroud)

查看NEST文档以获取更多信息,特别是创建索引放置映射部分.

  • @GregMarzouka您愿意为6.x更新此答案吗?当前的文档,尤其是关于[属性映射](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/attribute-mapping.html)的文档,有点缺乏。具体来说,我不知道如何通过属性为字段指定[index = false](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-index.html)。我尝试了[忽略],这不是我想要的-它从文档中完全排除了该属性。我只想指定它不可查询。谢谢! (2认同)