首页 > 解决方案 > 带有条件过滤器的 Nest 中的模糊弹性搜索查询

问题描述

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

例如,我在索引中有 10 个“John Smiths”。如果我省略了城市/州,只搜索“john brown”作为我的术语,或者“john”或“brown”或“jhn brwn”,我希望所有 10 个都回来。如果其中一个约翰·布朗住在纽约法拉盛,另一个住在乔治亚州法拉盛,我把“法拉盛”作为城市,那么我希望两个住在法拉盛的人都回来。如果我把“法拉盛”和“纽约”,那么我希望能回到其中一个。

我正在尝试一些不同的事情..这是我制作的构造。请记住,如果我直接在 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 有严格的要求,但是我觉得我需要一些指导才能做到这一点,因为我怀疑我犯了其他一些错误。

非常感谢您的宝贵时间!

标签: c#elasticsearchnest

解决方案


推荐阅读