gpt4 book ai didi

c# - 搜索时将作为类型传递给Search方法
转载 作者:行者123 更新时间:2023-12-03 02:37:51 25 4
gpt4 key购买 nike

我正在尝试实现SearchAll(),该方法将从已经通过API编写的不同索引中获取并合并结果。以我为例,“文档”是父类型,而“产品”,“用户”和“公司”是从“文档”类继承的特定类型。

我不希望将父级“文档”传递给Search()方法,因为那样不会获取特定的类型。因此,我改为传递“对象”。但是我不知道如何从“对象”传递字段名称。

我写的代码给我错误:

无法转换类型为“System.Collections.Generic.Dictionary`2 [System.String,System.Object]”的对象来键入“Common.SearchClient.Documents.Document”。

private static object SearchAll(string query, int skip = 0, int take = 10)
{
var outDocument = default(Common.SearchClient.Documents.Document);
var docs = _client.Search<object>(s => s
.Index(Indices.Index(
GetIndex<Common.SearchClient.Documents.User>().Name,
GetIndex<Common.SearchClient.Documents.Company>().Name,
GetIndex<Common.SearchClient.Documents.Product>().Name))
.From(skip)
.Size(take)
.Query(q => q
.MatchPhrasePrefix(c => c
.Field(p => p.TryCast(outDocument) ? outDocument.Name : "Name")
.Analyzer("standard")
.Boost(1.1)
.Query(query)
.MaxExpansions(2)
.Slop(2)
.Name("search_all")
)
)).Documents;
return docs;
}

最佳答案

But I am not able to figure how to pass the field name from 'object'.



您可以利用 Nest.Infer方法,因此您将能够以强类型方式访问类型字段
public class Document
{
public string Id { get; set; }
public string Text { get; set; }
}

Field<Document>(p => p.Text)

MatchPhrasePrefixz查询中的示例用法
await client.SearchAsync<object>(s => s
.Query(q => q
.MatchPhrasePrefix(m => m.Field(Field<Document>(p => p.Text)))));

请记住在您的CS文件中包含此静态导入
using static Nest.Infer;

希望能有所帮助。

关于c# - 搜索时将<object>作为类型传递给Search方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58497722/

25 4 0