gpt4 book ai didi

c# - ElasticSearch.NET/NEST - 所有 result.Hit 字段均为空(但结果在那里)

转载 作者:行者123 更新时间:2023-12-02 22:47:42 27 4
gpt4 key购买 nike

我的问题是,当我调用 .Search(...) 时,它返回的结果为所有字段设置了所有空值(即使这些字段具有有效数据)。

MyClass 是:

    public class Member {
public string ID { get; set; }

public string ClientID { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public string EmailAddress { get; set; }

public string PasswordHash { get; set; }

public string[] UserRoleIDs { get; set; }
}

我这样构建 Elastic Client:

var node = new Uri("<correct url here>");
var config = new ConnectionSettings(node);
config.BasicAuthentication("elastic", "<correct password here>");
config.DisableDirectStreaming(true);

DB = new ElasticClient(config);

我这样查询 Elastic:

var res = DB.Search<Member>(s => s
.Index("members")
.Skip(0)
.Take(10)
.Query(q => q
.Term(t => t.EmailAddress, emailAddress)
)
);

我得到的结果是 200 OK,有 Hits 和 Documents,两者都具有我正在搜索的记录的正确 ID(查询按预期成功)。

我还可以将 res.ApiCall.ResponseBodyInBytes 评估为一个字符串,我可以看到 elastic 返回的 JSON 是正确的(字段有数据)。

但是 .. res.Document.FirstOrDefault() 返回一个“成员”类,其中所有字段均为 NULL(强调一下,JSON 中的字段值为空)。

我尝试将其更改为使用 Dictionary 而不是我的 Member 对象,这似乎工作正常(例如 myDictionary["FirstName"] == "Dan")。

此外,我尝试使用搜索结果给我的 ID 并调用:

    var user = DB.Get<Member>(id, i => i.Index("members"));

这具有相同的最终结果,user.Hit 的所有字段均为 null :(

最佳答案

问题似乎出在属性的大小写上。当我刚开始使用 ES 和 .Net 时,我也遇到了同样的问题。如果您已通过 C# Nest 代码对其进行索引,则您的类成员的属性将已从 PascalCase 转换为 camelCase,并将作为 camelCase 进行索引。由于在 ES 中默认,字段/属性应该是驼峰式的。

如果您没有通过 C# Nest 客户端和 PostMan 或其他 API 客户端进行索引,并且如果 JSON 中出现的属性具有 PascalCase,那么它们将不会映射到您的对象,原因与上述相同。

如果您使用 PostMan 或类似的东西进行索引,请尝试将 ES 文档中的属性从 PascalCase 更改为 camelCase。

否则尝试通过 C# Nest Client 建立索引。这是一个通过 C# Nest 客户端建立索引的示例(如果您使用的是 Nest v7.x)并且如果有多个文档要建立索引:

Member[] members = new Member[10];

//some code to add Member class objects to members array.

var bulkIndexResponse = DB.BulkAsync(b => b.("members").IndexMany(members));

关于c# - ElasticSearch.NET/NEST - 所有 result.Hit 字段均为空(但结果在那里),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58175271/

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