【问题标题】:Search Query with Nest ElasticSearch having AND operator使用具有 AND 运算符的 Nest ElasticSearch 进行搜索查询
【发布时间】:2014-11-06 23:57:54
【问题描述】:

我正在尝试搜索以下文本:

“女性持有”(注“ ”用于文本表示)

我需要从上面的文本中获取弹性索引中存储的字段中包含“女性”和“持有”字样的所有项目。

我尝试的是:

 string searchText = "women held";
 var filterQuery = Query<T>.Terms("summaryText", searchText.Split(' '));
 var result = Client.Search<T>(s => s.Index(IndexName).Query(filterQuery).Size(1000));

但是上面的查询导致从“summaryText”字段中获取“Women”或“held”中的任何一个项目,但我想要的是“women and hold”,即两个文本都出现在“summaryText”字段中。

如果这有意义,请告诉我。 我尝试了很多组合,但仍然没有成功。 Nest Guru 的任何人都可以提供帮助吗??

【问题讨论】:

    标签: c# elasticsearch nest


    【解决方案1】:

    如果您想在字段上完全匹配“女人持有”,则不要拆分字符串:

    string searchText = "women held";
    var filterQuery = Query<T>.Terms("summaryText", searchText);
    var result = Client.Search<T>(s => s.Index(IndexName).Query(filterQuery).Size(1000));
    

    如果您正在寻找“包含”功能,那么您需要使用regexp 查询(但如果您的数据很大,则会产生性能开销):

    SearchDescriptor<T> descriptor = new SearchDescriptor<T>();
    descriptor = descriptor.Index(IndexName).Size(1000)
        .Query(query => query
            .Regexp(r => r.OnField("summaryText").Value(".*" + "woman held" + ".*")));
    var result = ElasticClient().Search<T>(s => descriptor);
    

    【讨论】:

    • 感谢@gsk,这是一个很好的技巧,但我的索引真的很大,有通配符正则表达式肯定会减慢执行速度。刚才我尝试了其他方法,它奏效了。不知道为什么 Nest .Net 不提供。我会发布作为答案。
    【解决方案2】:

    这就是我得到的解决方案,希望它可以帮助任何尝试类似 ANDing 搜索的人。 好吧,这不是一种优雅的方式,但对我有用:

    string searchText = "women held";
    string[] splitSearch = searchText.Split(' ');
    List<QueryContainer> searchQueryList = new List<QueryContainer>();
    foreach(var strText in splitSearch)
    {
       searchQueryList.Add(Query<T>.Term("summaryText", strText));
    }
    
    var filterQuery = Query<T>.Bool(b=> b.Must(searchQueryList.ToArray()));
    var result = Client.Search<T>(s => s.Index(IndexName).Query(filterQuery).Size(1000));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-07
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2019-08-11
      • 2014-10-22
      • 1970-01-01
      相关资源
      最近更新 更多