【问题标题】:Use predicate expression with NEST in .NET 5在 .NET 5 中使用带有 NEST 的谓词表达式
【发布时间】:2021-09-21 14:26:33
【问题描述】:

是否可以在 NEST (.NET 5) 中配置一种对所有 NEST 查询(GetAsyncGetManyAsync 使用默认谓词表达式(默认查询过滤器)的方法, SearchAsync, ExistsAsync, ...) 在任何索引上执行?

这个想法是像在 Entity Frameork 中那样工作,使用 HasQueryFilter,例如:

builder.HasQueryFilter(m => m.DeletedAt == null);

在所有查询中,表达式DeletedAt == null 被插入到查询中。

【问题讨论】:

    标签: .net elasticsearch repository-pattern nest


    【解决方案1】:

    您可以利用ConnectionSettings 中的GlobalQueryStringParameters 方法,但似乎查询参数将发送给那些支持查询参数(q)的人,例如search endpoint

    而且您将无法使用例如GetAsync 因为它不支持q 参数。

    var indexName = "test";
    var connectionSettings = new ConnectionSettings(new Uri("http://localhost:9200"));
    connectionSettings.EnableDebugMode();
    connectionSettings.DefaultIndex(indexName);
    var nameValueCollection = new NameValueCollection();
    nameValueCollection.Add("q", "deletedAt: null");
    connectionSettings.GlobalQueryStringParameters(nameValueCollection);
    var elasticClient = new ElasticClient(connectionSettings);
    
    var searchResponse = await elasticClient.SearchAsync<EsDocument>(s => s.Query(q => q.Term("id", 1)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多