MultiMatch的动态字段列表-嵌套

问题描述 投票:0回答:1

我们需要搜索具有可变/动态数量字段的文档类型。对于一种搜索/类型,它可能是名称和状态。另外,说明字段。用户将在运行时选择要搜索的字段。

静态地执行此操作似乎很容易。可以在“名称”和“描述”字段中进行搜索。 (假设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);
}

这可能吗?如果是这样,如何?

nest
1个回答
0
投票

您可以将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"
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.