NEST中模糊搜索的条件弹性搜索过滤器

问题描述

我有一个针对我的索引的有效查询,但是我很难让条件过滤器正常工作。

我的查询如下:

       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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...