Nest 中带有条件过滤器的模糊弹性搜索查询

问题描述

我是 nest 和 Elastic Search 的新手,虽然我能够使用更基本的查询,但我现在正在尝试解决这个问题:

  • 在 firstName 或 lastName 字段中查找用户,对于给定的输入查询,它应该是模糊的,以便您可以处理拼写错误
  • 如果提供了城市,则过滤所有匹配项,使其与城市匹配
  • 如果还提供了状态,则过滤所有匹配项,使其与状态匹配
  • 仅包含字段“isSearchable”为真的人
  • 如果提供了城市和州,那么当然两者都匹配

例如,我在索引中有 10 个“John Smiths”。如果我不考虑城市/州,而只搜索“john brown”作为我的术语,或者“john”或“brown”或“jhn brwn”,我希望所有 10 都回来。 如果 John browns 中的一个住在纽约法拉盛,另一个住在佐治亚州法拉盛,而我把“法拉盛”作为城市,那么我希望两个住在法拉盛的人都回来。如果我把“ Flushing”和“New York”然后我希望能得到其中之一。

我尝试了一些不同的东西..这是我制作的构造。请记住,如果我直接在 Elastic Search 中浏览到 URL 并查询 *,它会返回我的记录,如果我执行 _search?q=somename 它会返回匹配项,因此我知道我已设置并编入索引。>

var foundUsers = new List<IndexedUser>();

 
                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)));

                //Ony find users who want to be searched
                filters.Add(fq => fq.Terms(t => t.Field(f => f.IsSearchable).Strict(true)));
 
                var results = client.Search<IndexedUser>(x => x.Query(q => q
                 .Bool(
                         bq => bq
                           .Should(
                              s => s.Match(m => m.Query(term).Field(f => f.FirstName).Boost(1.1).Fuzziness(Fuzziness.Editdistance(1))),s => s.Match(m => m.Query(term).Field(f => f.LastName).Boost(1.1).Fuzziness(Fuzziness.Editdistance(1)))
                             )
                           .Filter(filters))
                      ).Index("user")
                  );


 foundUsers = results.Documents.Concat(results.Documents).ToList();

当我运行它时,它崩溃并给出错误

2020-12-21T04:29:25.4214526+00:00 0HM55D28OUJ5C:00000009 [ERR] ERROR With Search: Query is conditionless but strict is turned on (47081e5a)

我上面的理解可能是因为我对 isSearchable 有严格要求,但是我觉得我在这里需要一些指导才能做到这一点,因为我怀疑我犯了其他一些错误

非常感谢您抽出宝贵时间!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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