我在C#中使用NEST和ElasticSearch。我有一段代码,它采用QueryDescriptor类型,并返回一个BaseQuery。
这个方法有点像这样:
...
.Query(
queryDescriptor => queryDescriptor
.Filtered(
filteredQueryDescriptor => filteredQueryDescriptor
.Query(queryString => searchParameters.SearchTree.ToElasticSearch(queryString))
.Filter(filterDescriptor => searchParameters.SearchTree.ToElasticSearchFilter(filterDescriptor))
)
)
...
方法“ToElasticSearch”看起来有点像:
...
public override BaseQuery ToElasticSearch(QueryDescriptor<DomainProfile> queryDescriptor)
{
return queryDescriptor.DoSomething
}
...
现在在我的ToElasticSearch方法中。我想返回一个看起来有点像下面的BaseQuery。
return queryDescriptor
.HasChild<ChildProfile>(
child => child.Query(
query => query.QueryString(
queryStringDescriptor =>
queryStringDescriptor.OnFieldsWithBoost(
boost => boost
.Add(profile => profile.Notes, 5)
)
.Query(QueryString.PrepareForSearch(SearchText))
.Operator(Operator.and)
.AutoGeneratePhraseQueries(true)
.PhraseSlop(0)
)
)
)
||
queryDescriptor.QueryString(
queryStringDescriptor =>
queryStringDescriptor
.OnFieldsWithBoost(
boost => boost
.Add(profile => profile.PersonalDetail.Email, 7)
)
.Query(QueryString.PrepareForSearch(SearchText))
.Operator(Operator.and)
.AutoGeneratePhraseQueries(true)
.PhraseSlop(0)
);
如果它看起来很乱,那是因为它是。 OR部分显然不对。我这样做是为了让事情顺利进行(或者它会起作用吗?我不认为Boost部分会正常工作,但请随意让我直截了当)。
似乎给定了一个QueryDescriptor,我无法对主搜索对象和同一查询中的子进行查询。它似乎是或两个查询都返回一个BaseQuery,如果你愿意,我不确定如何“粘贴”。