使用HasChild和Query运算符创建Nest查询

时间:2014-03-11 01:20:10

标签: c# elasticsearch nest

我在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,如果你愿意,我不确定如何“粘贴”。

0 个答案:

没有答案