MultiMatch 的动态字段列表 - Nest
Dynamic field list for MultiMatch - Nest
我们需要搜索具有 variable/dynamic 个查询字段的文档类型。对于一个 search/type,它可能是名称和状态。另一方面,描述字段。要搜索的字段将由用户在 运行 时间选择。
静态地执行此操作似乎很容易。在名称和描述字段中搜索类似这样的内容。 (假设 rootQuery 是准备好查询的有效 searchDescriptor。
rootQuery.Query(q => q.MultiMatch(mm => mm.Query(filter.Value.ToString()).Fields(f => f.Field(ff => ff.Name).Field(ff => ff.Description))));
但是,如果可能的话,我们不希望有一个静态查询库来处理潜在的排列。我们宁愿做一些动态的事情,比如:
foreach (var field in string-list-of-fields-from-user)
{
rootQuery.Query(q => q.MultiMatch(mm => mm.Query(filter.Value.ToString()).Fields(f => f.Field(ff => field);
}
这可能吗?如果可以,怎么做?
您可以将 string
字段列表直接传递给 .Fields(...)
var searchResponse = client.Search<Document>(s => s
.Query(q => q
.MultiMatch(mm => mm
.Query("query")
.Fields(new string[] { "field1", "field2", "field3" })
)
)
);
产生
{
"query": {
"multi_match": {
"fields": ["field1", "field2", "field3"],
"query": "query"
}
}
}
我们需要搜索具有 variable/dynamic 个查询字段的文档类型。对于一个 search/type,它可能是名称和状态。另一方面,描述字段。要搜索的字段将由用户在 运行 时间选择。
静态地执行此操作似乎很容易。在名称和描述字段中搜索类似这样的内容。 (假设 rootQuery 是准备好查询的有效 searchDescriptor。
rootQuery.Query(q => q.MultiMatch(mm => mm.Query(filter.Value.ToString()).Fields(f => f.Field(ff => ff.Name).Field(ff => ff.Description))));
但是,如果可能的话,我们不希望有一个静态查询库来处理潜在的排列。我们宁愿做一些动态的事情,比如:
foreach (var field in string-list-of-fields-from-user)
{
rootQuery.Query(q => q.MultiMatch(mm => mm.Query(filter.Value.ToString()).Fields(f => f.Field(ff => field);
}
这可能吗?如果可以,怎么做?
您可以将 string
字段列表直接传递给 .Fields(...)
var searchResponse = client.Search<Document>(s => s
.Query(q => q
.MultiMatch(mm => mm
.Query("query")
.Fields(new string[] { "field1", "field2", "field3" })
)
)
);
产生
{
"query": {
"multi_match": {
"fields": ["field1", "field2", "field3"],
"query": "query"
}
}
}