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"
    }
  }
}