新的NEST dll版本NEST.1.1.2中缺少BaseQuery类

本文关键字:NEST BaseQuery dll 版本 新的 | 更新日期: 2023-09-27 18:26:25

新版本中BaseQuery类的替换是什么。我哪儿也找不到。

我的问题是如何在c#中为搜索条件生成语法:

public class TextSearch
{
   public string Headline {get;set;}
   public string Summary {get;set;}
}

我需要使用文本"you"进行搜索,将两列作为OR运算符,即第1列摘要和第2列标题。

早些时候我在做

                var orQuery = new List<BaseQuery>();
                if (!string.IsNullOrEmpty(searchtext))
                {
                    orQuery .Add(Query<TextSearch>.Terms("headline", searchOptions.text.ToLower().Split(' ')));
                    orQuery .Add(Query<TextSearch>.Terms("summary", searchOptions.text.ToLower().Split(' ')));
                }
           var finalQuery = new List<BaseQuery>();
            finalQuery .Add(Query<TextSearch>.Bool(o => o.Should(orQuery.ToArray())));

现在这行不通了。在新版本中有更好的搜索语法吗。搜索标准应该使用LIKE和OR,例如,总结LIKE"%you%"或标题LIKE"%you%"

新的NEST dll版本NEST.1.1.2中缺少BaseQuery类

关于NEST 1.0中的突破性更改的文档非常完整:

http://nest.azurewebsites.net/breaking-changes.html

我们将BaseQuery重命名为QueryContainer

查询可以是:

client.Search<TextSearch>(s=>s
    .Query(q=>
       q.Terms("headline", words)
       || q.Terms("summary", words)
    )
)

如果words为空或为空,则不渲染该部分,请参阅此处的conditionless query部分:

http://nest.azurewebsites.net/nest/writing-queries.html

@Martijn Laarman由于我们有许多基于用户选择的过滤器将是动态的过滤器标准,我正在基于用户选择的过滤器在模式中构建过滤器查询,然后将其传递给Search<>方法为:

 QueryContainer mainQuery = null; 
 if (!string.IsNullOrEmpty(searchOptions.SearchText))
 {
   var headline = Query<T>.Terms("headline", searchOptions.Headline.ToLower());
   var summary = Query<T>.Terms("fullSummary", searchOptions.Summary.ToLower());
   mainQuery &= (headline || summary);
 }
 if (searchOptions.FromDate != DateTime.MinValue && searchOptions.ToDate != DateTime.MinValue)
 {
     var dateFilter = Query<T>.Range(
                                r => r.OnField("processedDate").GreaterOrEquals(searchOptions.FromDate, ElasticDateFormat).LowerOrEquals(searchOptions.ToDate, ElasticDateFormat));
     mainQuery &= dateFilter;
 }
 var result = Client.Search<T>(s => s.Query(mainQuery ).Size(Int32.MaxValue));

这里Client是一个返回ElasticClient对象的属性。希望这是正确的做法。