gpt4 book ai didi

elasticsearch - 在 Elasticsearch Nest 查询中加载特定字段

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

文档似乎表明我可以返回字段的子集而不是整个文档。这是我的代码:

var result = client.Search<MyObject>(s => s
.Fields(f => f.Title)
.Query(q => q
.QueryString(qs => qs
.OnField("title")
.Query("the"))));

我在“标题”字段中搜索“the”一词,只想返回“标题”。我的 result.Documents 对象包含 10 个对象,每个对象都为 null。

我确实看到了我想要的值,但它在搜索响应中很深:结果.Hits[0].Fields.FieldValues[0]...

是否有更好的方法来获取返回的“标题”字段列表?

我的数据映射(截断)是这样的......

{
"myidex": {
"mappings": {
"myobject": {
"properties": {
"title": {
"type": "string"
},
"artists": {
"properties": {
"id": {
"type": "string",
"index": "not_analyzed",
"analyzer": "fullTerm"
},
"name": {
"type": "string",
"index": "not_analyzed",
"analyzer": "fullTerm"
}
}
}
}
}
}
}
}

我的类对象是这样的:

[Table("MyTable")]
[Serializable]
[ElasticType(Name="myobject")]
public class MyObject
{
[ElasticProperty]
public string Title { get; set; }

[JsonIgnore]
public string Artistslist { get; set; }
[ElasticProperty(Analyzer = "caseInsensitive")]
public List<Person> Artists { get; set; }
}

[Serializable]
public class Person
{
[ElasticProperty(Analyzer = "fullTerm", Index = FieldIndexOption.not_analyzed)]
public string Name { get; set; }
[ElasticProperty(Analyzer = "fullTerm", Index = FieldIndexOption.not_analyzed)]
public string Id { get; set; }
}

Artistslist 来 self 的数据源 (sql),然后我在索引数据之前将其解析为一个新的 List 对象。

最佳答案

我认为这个深度嵌套的值是针对 Elasticsearch 1.0 中的更改以及部分字段现在如何作为数组返回的(有关详细信息,请参阅 1.0 Breaking Changes - Return Values)。这在 NEST 1.0 Breaking Changes 中得到解决。文档;在 Fields() 与 SourceIncludes() 部分。它显示了一个使用 FieldValue 辅助方法来访问这些值的示例。基于此,尝试以下操作:

对于所有项目:

 foreach (var hit in result.Hits)
{
var title = hit.Fields.FieldValue<MyObject, string>(f => f.Title);
}

对于特定项目:

 var title = result.Hits.ElementAt(0)
.Fields.FieldValue<MyObject, string>(f => f.Title);

我知道它仍然有点冗长,但它应该适合您,并且会处理 Elasticsearch 1.0 的新数组返回格式。

关于elasticsearch - 在 Elasticsearch Nest 查询中加载特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23688365/

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