我们需要搜索具有可变/动态数量字段的文档类型。对于一种搜索/类型,它可能是名称和状态。另外,说明字段。用户将在运行时选择要搜索的字段。
静态地执行此操作似乎很容易。可以在“名称”和“描述”字段中进行搜索。 (假设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"
}
}
}