【发布时间】:2017-10-30 13:15:40
【问题描述】:
您好,我在嵌套中使用以下查询
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 子句并保留 1st 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)))))
【问题讨论】:
标签: elasticsearch nest elasticsearch-plugin elasticsearch-marvel