根据http://nest.azurewebsites.net/concepts/writing-queries.html,&&和|| 运算符可用于使用NEST库组合两个查询以与Elastic Search进行通信.
我有以下查询设置:
var ssnQuery = Query<NameOnRecordDTO>.Match(
q => q.OnField(f => f.SocialSecurityNumber).QueryString(nameOnRecord.SocialSecurityNumber).Fuzziness(0)
);
Run Code Online (Sandbox Code Playgroud)
然后将其与Bool查询结合使用,如下所示:
var result = client.Search<NameOnRecordDTO>(
body => body.Query(
query => query.Bool(
bq => bq.Should(
q => q.Match(
p => p.OnField(f => f.Name.First)
.QueryString(nameOnRecord.Name.First).Fuzziness(fuzziness)
),
q => q.Match(p => p.OnField(f => f.Name.Last)
.QueryString(nameOnRecord.Name.Last).Fuzziness(fuzziness)
)
).MinimumNumberShouldMatch(2)
) || ssnQuery
)
);
Run Code Online (Sandbox Code Playgroud)
我认为这个查询意味着如果SocialSecurityNumber匹配,或者两个Name.First和Name.Last字段都匹配,那么记录应该包含在结果中.
当我使用在QueryString调用中使用的nameOnRecord对象的跟随数据执行此查询时:
"socialSecurityNumber":"123456789",
"name" : {
"first":"ryan",
}
Run Code Online (Sandbox Code Playgroud)
结果是SSN的人123456789,以及任何有名字的人ryan.
如果我|| ssnQuery从上面的查询中删除,我会得到名字为'ryan'的每个人.
随着|| …