模糊ElasticSearch查询

hof1towb  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(0)|浏览(266)

我是nest和elastic search的新手,虽然我能够让一个更基本的查询工作,但我现在正在尝试解决这个问题:
对于给定的输入查询,在firstname或lastname字段中查找用户,它应该是模糊的,这样您就可以处理打字错误
如果提供了城市,则过滤所有点击,使其与城市匹配
如果还提供了state,则过滤所有命中,使其与state匹配
仅包括字段“issearchable”为真的人员
如果提供了一个城市和一个州,那么这两个城市当然是匹配的
举个例子,索引里有10个“约翰·史密斯”。如果我省略了城市/州,只搜索“john brown”作为我的术语,或者搜索“john”或“brown”或“jhn brwn”,我希望所有的10个都会回来。如果约翰·布朗一个住在纽约的法拉盛,另一个住在乔治亚的法拉盛,我把“法拉盛”写在这个城市里,那么我希望能把住在法拉盛的两个人都找回来。。如果我把“法拉盛”和“纽约”放在一起,那么我就可以得到其中一个。
我尝试了一些不同的东西…这是我做的结构。请记住,如果我在elastic search中直接浏览到url并查询*,它将返回我的记录,如果我执行\u 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)

我理解以上可能是因为我有严格的ISearcable,但我觉得我需要一些指导,在这里得到正确的,因为我怀疑我犯了其他一些错误。
非常感谢您抽出时间!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题