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

时间:2014-10-14 14:21:01

标签: c# elasticsearch nest

新版本中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, 例如总结像'%you%'或者像'%你%'

一样

2 个答案:

答案 0 :(得分:5)

有关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为空或null该部分未呈现,请参阅此处的conditionless query部分:

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

答案 1 :(得分:0)

@Martijn Laarman 由于我们有许多基于用户选择过滤器的动态过滤条件, 我基于用户的滑动过滤器在方法中构建过滤查询,然后将其传递给搜索&lt;&gt;方法为:

 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对象的属性。 希望这是正确的做法。