问题描述
我有一个针对我的索引的有效查询,但是我很难让条件过滤器正常工作。
我的查询如下:
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,还是上面有逻辑缺陷?
非常感谢您的帮助/指导!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)