elasticsearch - MultiMatch的动态字段列表-Nest

标签 elasticsearch nest

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

静态地做到这一点看起来很容易。可以在“名称”和“描述”字段中进行搜索。 (假设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"
    }
  }
}

关于elasticsearch - MultiMatch的动态字段列表-Nest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58827534/

相关文章:

python - 序列化Haystack SearchQuerySet

elasticsearch - 如何在索引时停止在内容中存储特殊字符

docker - 我的结构化日志消息中的时间字段来自哪里?

c# - Entity Framework 将数千个对象传输到 Elastic Search

.net - 在具有edge-n-gram分析器的字段上进行GroupBy创建所有不必要的ngram token 作为键

elasticsearch - 嵌套DSL语法中的多个术语

nest - Elasticsearch ,巢。功能排序

elasticsearch - 如何查看NEST API创建的REST JSON?

elasticsearch - 用于多个存储桶的 Couchbase/Elasticsearch 连接器

java - 使用 java 客户端 6.5 插入对象