嗨,我在嵌套中使用以下查询
Query<Person>
.Bool(fd => fd
.Must(must => must
.Match(m => m
.Field("first_name")
.Query(p.first_name)
.Fuzziness(Fuzziness.EditDistance(2))),
must => must
.Match(ln => ln
.Field("last_name")
.Query(p.last_name)
.Fuzziness(Fuzziness.EditDistance(2))))
.Should(ffn => ffn
.Match(m => m
.Field("father_first_name")
.Query(p.father_first_name)
.Fuzziness(Fuzziness.EditDistance(2))))
.Should(fln => fln
.Match(m => m
.Field("father_last_name")
.Query(p.father_last_name)
.Fuzziness(Fuzziness.EditDistance(2)))));
以下是为相同生成的 json 查询
{"query":{"bool":{"must":[{"match":{"first_name":
{"query":"abigail","fuzziness":2}}},{"match":{"last_name":
{"query":"may","fuzziness":2}}}],"should":[{"match":
{"father_last_name":{"query":"s","fuzziness":2}}}]}}}
即使我为father_first_name 传递了第一个should 子句的值,它也只为father_last_name 采用last should 子句。具有讽刺意味的是,如果我注释掉 parent_last_name 的 last should 子句并保留第一个 should 子句,它就会开始使用father_first_name
Modified nest query with only 1 should clause
Query<Person>
.Bool(fd => fd
.Must(must => must
.Match(m => m
.Field("first_name")
.Query(p.first_name)
.Fuzziness(Fuzziness.EditDistance(2))),
must => must
.Match(ln => ln
.Field("last_name")
.Query(p.last_name)
.Fuzziness(Fuzziness.EditDistance(2))))
.Should(ffn => ffn
.Match(m => m
.Field("father_first_name")
.Query(p.father_first_name)
.Fuzziness(Fuzziness.EditDistance(2)))));
将返回
{"query":{"bool":{"must":[{"match":{"first_name":
{"query":"abigail","fuzziness":2}}},{"match":{"last_name":
{"query":"may","fuzziness":2}}}],"should":[{"match":
{"father_first_name":{"query":"t","fuzziness":2}}}]}}}
如何在查询中添加多个应该
.Bool(fd => fd
.Must(must => must
.Match(m => m
.Field("first_name")
.Query(p.first_name)
.Fuzziness(Fuzziness.EditDistance(2))),
must => must
.Match(ln => ln
.Field("last_name")
.Query(p.last_name)
.Fuzziness(Fuzziness.EditDistance(2))))
.Should(should => should
.Match(m => m
.Field("father_first_name")
.Query(p.father_first_name)
.Fuzziness(Fuzziness.EditDistance(2))),
should => should.Match(m => m
.Field("father_last_name")
.Query(p.father_last_name)
.Fuzziness(Fuzziness.EditDistance(2)))),
should => should.Match(m => m
.Field("mother_first_name")
.Query(p.mother_first_name)
.Fuzziness(Fuzziness.EditDistance(2)))))