新版本中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%'或者像'%你%'
一样答案 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
部分:
答案 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对象的属性。 希望这是正确的做法。