elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# ElasticSearch&;嵌套错误转换

C# ElasticSearch&;嵌套错误转换,c#,elasticsearch,nest,C#,elasticsearch,Nest,我对弹性有一种纯粹的呼唤,这种呼唤是有效的。它返回29个文档: GET /idxsearch-test/movies/_search { "size": 20, "query": { "bool": { "must": { "bool" : { "should": [ {"term": {"tag.name": "Pari

我对弹性有一种纯粹的呼唤,这种呼唤是有效的。它返回29个文档:

GET /idxsearch-test/movies/_search
{
  "size": 20,
  "query": {
    "bool": {
            "must": {
                "bool" : { 
                  "should": [ 
                                {"term": {"tag.name": "Paris"}},
                                {"multi_match" : {
                                  "operator":   "and",
                                    "query" : "Paris",
                                    "fields": ["movie_title.default^10",
                                    "movie_title.snowball^2",
                                    "movie_title.shingles^2",
                                    "movie_title.ngrams"]}}
                            ] 
                }
            }, 
            "filter": {
              "term": { "is_adult": false }
            }
        }
  },
  "_source": ["id_content", "movie_title", "vote_average", "tag.name", "is_adult"]
}
我需要用Nest,所以我改成了这个。它返回0:

        var vod = client.Search<dynamic>(s => s
                            .Size(10)
                            .From(1)
                            .Index(defaultIndex)
                            .Type("movies")
                            .Query(qry1 => qry1
                                            .FunctionScore(fs =>
                                                    fs.Query(qry2 =>
                                                                qry2.Bool(bool1 =>
                                                                            bool1.Must(must1 =>
                                                                                        must1.Bool(bool2 =>
                                                                                                    bool2.Should(should1 =>
                                                                                                    {
                                                                                                        QueryContainer qc = null;
                                                                                                        qc &= should1.Term(tt => tt.Field("tag.name").Value(keywords));
                                                                                                        qc &= should1.MultiMatch(mm1 => mm1.Fields(ff => ff
                                                                                                                                                        .Field("movie_title.default^10")
                                                                                                                                                        .Field("movie_title.snowball^2")
                                                                                                                                                        .Field("movie_title.shingles^2")
                                                                                                                                                        .Field("movie_title.ngrams"))
                                                                                                                                        .Operator(Operator.And)
                                                                                                                                        .Query(keywords));

                                                                                                        return qc;
                                                                                                    })
                                                                                                  )
                                                                                       )
                                                                            .Filter(fil =>
                                                                            {
                                                                                QueryContainer query = null;
                                                                                if (!includeAdult)
                                                                                    query &= fil.Terms(fil2 => fil2.Field("is_adult").Terms(false));

                                                                                return query;
                                                                            })
                                                                        )
                                                           )
                                            .BoostMode(FunctionBoostMode.Sum)
                                            .Functions(ff => ff.FieldValueFactor(fv => fv.Field("vote_average")
                                                                                        .Factor(0.5)
                                                                                        .Modifier(FieldValueFactorModifier.Log1P)))
                            ))
                );
var vod=client.Search(s=>s
.尺寸(10)
.自(1)
.Index(默认索引)
.Type(“电影”)
.Query(qry1=>qry1
.FunctionScore(fs=>
fs.Query(qry2=>
qry2.Bool(bool1=>
bool1.Must(must1=>
must1.Bool(bool2=>
bool2.Should(should1=>
{
QueryContainer qc=null;
qc&=should1.Term(tt=>tt.Field(“tag.name”).Value(关键字));
qc&=should1.MultiMatch(mm1=>mm1.Fields(ff=>ff
.Field(“电影标题.默认值^10”)
.Field(“电影名称:雪球^2”)
.Field(“电影名称.木瓦^2”)
.Field(“movie_title.ngrams”))
.操作员(操作员和)
.查询(关键字));
返回qc;
})
)
)
.过滤器(fil=>
{
QueryContainer query=null;
如果(!includeDult)
查询&=fil.Terms(fil2=>fil2.Field(“is_成人”).Terms(false));
返回查询;
})
)
)
.BoostMode(函数BoostMode.Sum)
.函数(ff=>ff.FieldValueFactor(fv=>fv.Field(“投票平均值”)
.系数(0.5)
.Modifier(FieldValueFactorModifier.Log1P)))
))
);
但是结果是不同的。。。我错过了什么

有没有办法以更干净、正确的方式拨打相同的电话


干杯

第一个查询可以写成

//Fluent
            client.Search<dynamic>(
                s => s.
                Index("idxsearch-test").
                Type("movies").
                Take(20).
                Query(q => q.Bool(
                              b => b.Must(m => m.Term(t => t.Field("tag.name").Value("Paris")) ||
                                              m.MultiMatch(mm => mm.Fields(f => f.
                                                                              Field("movie_title.default", 10).
                                                                              Field("movie_title.snowball", 2).
                                                                              Field("movie_title.shingles", 2).
                                                                              Field("movie_title.ngrams")))).
                                      Filter(f => includeAdult ? f.Term(t => t.Field("is_adult").Value("")) : null))).
                 Source(sc => sc.Includes(i => i.Field("id_content").Field("movie_title").Field("vote_average").Field("tag.name").Field("is_adult"))));

            //Object
            client.Search<dynamic>(new SearchRequest<dynamic>("idxsearch-test", "movies")
            {
                Size = 20,
                Query = new BoolQuery
                {
                    Must = new QueryContainer[]
                    {
                        new BoolQuery
                        {
                            Should = new QueryContainer[]
                            {
                                new TermQuery() { Field = "tag.name", Value = "Paris" },
                                new MultiMatchQuery
                                {
                                    Fields = new [] { "movie_title.default^10", "movie_title.snowball^2", "movie_title.shingles^2", "movie_title.ngrams" }
                                }
                            }
                        }
                    },
                    Filter = includeAdult ? new QueryContainer[]
                    {
                        new TermQuery { Field = "is_adult", Value = false }
                    } : null
                },
                Source = new Union<bool, ISourceFilter>(new SourceFilter { Includes = new[] { "id_content", "movie_title", "vote_average", "tag.name", "is_adult" } })
            });
//Fluent
客户端搜索(
s=>s。
索引(“idx搜索测试”)。
类型(“电影”)。
以(20)为例。
查询(q=>q.Bool(
b=>b.Must(m=>m.Term(t=>t.Field(“tag.name”).Value(“Paris”))||
m、 多重匹配(mm=>mm.字段(f=>f。
字段(“movie_title.default”,10)。
字段(“电影标题。雪球”,2)。
字段(“电影标题。木瓦”,2)。
字段(“movie_title.ngrams”))。
过滤器(f=>includeDult?f.Term(t=>t.Field(“is_成人”).Value(“”):null)))。
来源(sc=>sc.Includes(i=>i.Field(“id\u内容”)。Field(“电影名称”)。Field(“投票平均”)。Field(“tag.name”)。Field(“is\u成人”));
//反对
client.Search(新的搜索请求(“idxsearch测试”、“电影”)
{
尺寸=20,
Query=newboolquery
{
必须=新的QueryContainer[]
{
新布尔查询
{
Should=新的QueryContainer[]