我有一个对我的索引工作查询,但我有困难得到一个条件过滤器工作。
我的查询如下:
var firstSearchResponse = client.Search<IndexedUser>(s => s
.Query(q =>
(q
.Match(m => m
.Field(f => f.FirstName)
.Query(term)
.Fuzziness(Fuzziness.EditDistance(2))
)
||
q.Match(m => m
.Field(f => f.LastName)
.Query(term)
.Fuzziness(Fuzziness.EditDistance(2))
))
&&
(
q.Match(m => m
.Field(f => f.IsSearchable)
.Query("true")
)
)
);
不过,现在我想说的是,如果一个用户通过一个城市,或一个州,或两者,然后过滤这些字段中的每一个,只返回这些结果。
举个例子,如果我通过了纽约的一个城市,那么只过滤那些结果。
我该怎么做?
我尝试使用postfilter,但在传入输入时似乎不起作用:
var filters = new List<Func<QueryContainerDescriptor<IndexedUser>, QueryContainer>>();
//If city was provided, then search on that
if (!String.IsNullOrEmpty(city))
filters.Add(fq => fq.Terms(t => t.Field(f => f.City).Terms(city)));
//If state was provided, then search on that
if (!String.IsNullOrEmpty(state))
filters.Add(fq => fq.Terms(t => t.Field(f => f.State).Terms(state)));
然后在我的查询结束时,添加以下内容:
var firstSearchResponse = client.Search<IndexedUser>(s => s
.Query(q =>
(q
.Match(m => m
.Field(f => f.FirstName)
.Query(term)
.Fuzziness(Fuzziness.EditDistance(2))
)
||
q.Match(m => m
.Field(f => f.LastName)
.Query(term)
.Fuzziness(Fuzziness.EditDistance(2))
))
&&
(
q.Match(m => m
.Field(f => f.IsSearchable)
.Query("true")
)
)
).PostFilter(p => p.Bool(q => q.Filter(filters))));
..如果我添加了postfilter,除非我真的为城市或州传递了一个值,否则它会工作。我是误用了postfilter,还是上面有逻辑缺陷?
非常感谢您的帮助/指导!
暂无答案!
目前还没有任何答案,快来回答吧!