ElasticSearch 7 nest 7从结果所有结果返回属性

问题描述

我正在使用ElarsticSearch 7.7和NEST 7.7,在我的网页上,每页有9个搜索结果文档。即使我在页面上显示前9个结果,我也需要从所有结果中返回一些属性值,以便在网页上进行侧面过滤。

例如:如果我搜索“ LapTop”,则我的页面将在第一页上显示9条结果。另外,我需要显示所有搜索结果中的所有“商品” 。不仅制造商在首页上排名。然后,客户不仅可以在首页上显示,还可以按制造商进行过滤。 我尝试过GlobalAggregation,但是它返回类别并仅在选定页面中制造商品。

  public SearchResult Search(SearchType searchType,string searchQuery,int storeId,int pageNumber = 1,int pageSize = 12,IList<SearchFilter> requestFilter = null,decimal? priceFrom = 0,decimal? priceTo = 100000000,string sortBy = null,int totalCount = 0)
            {
                var queryContainer = new QueryContainer();
    
                var sorts = new List<ISort>();
                sorts.Add(new FieldSort { Field = "_score",Order = SortOrder.Descending });
                switch (sortBy)
                {
                    case "z-a":
                        sorts.Add(new FieldSort { Field = Field<ElasticIndexGroupProduct>(p => p.SortValue),Order = SortOrder.Descending });
                        break;
                    case "a-z":
                        sorts.Add(new FieldSort { Field = Field<ElasticIndexGroupProduct>(p => p.SortValue),Order = SortOrder.Ascending });
                        break;               
                }
    
    
                var aggrigations = new AggregationDictionary
                 {
                    {"average_per_child",new 
 AverageAggregation("average_per_child",Field<ElasticIndexGroupProduct>(d =>  d.Price))},{"max_per_child",new MaxAggregation("max_per_child",Field<ElasticIndexGroupProduct>(d => d.Price))},{"min_per_child",new MinAggregation("min_per_child",{
                     "globle_filter_aggrigation",new GlobalAggregation("globle_filter_aggrigation")
                    {
                       Aggregations =new AggregationDictionary
                      {
                        {"category_flow",new TermsAggregation("category_flow"){Field = Field<ElasticIndexGroupProduct>(p => p.CategoryFlow)} },{"manufacturers",new TermsAggregation("manufacturers"){Field = Field<ElasticIndexGroupProduct>(p => p.Manufacturer)} }
                     }
                   }
                  }                   
                };
               
                var searchRequest = new SearchRequest<ElasticIndexGroupProduct>()
                {
                    Profile = true,From = (pageNumber - 1) * pageSize,Size = pageSize,Version = true,Sort = sorts,//Scroll = Time.MinusOne,Aggregations = aggrigations
                };
    
                 var multiMatch = new QueryStringQuery
                 {
                        Query = searchQuery,Fields = GetSearchFields(searchType),Boost = 1.1,Name = "named_query",DefaultOperator = Operator.Or,Analyzer = "standard",QuoteAnalyzer = "keyword",AllowLeadingWildcard = true,MaximumDeterminizedStates = 2,Escape = true,FuzzyPrefixLength = 2,FuzzyMaxExpansions = 3,FuzzyRewrite = MultiTermQueryRewrite.ConstantScore,Rewrite = MultiTermQueryRewrite.ConstantScore,Fuzziness = Fuzziness.Auto,TieBreaker = 1,AnalyzeWildcard = true,MinimumShouldMatch = 2,QuoteFieldSuffix = "'",Lenient = true,AutoGenerateSynonymsPhraseQuery = false
                };
    
                searchRequest.Query = new BoolQuery
                {
                        Must = new QueryContainer[] { multiMatch },Filter = new QueryContainer[] { queryContainer }
                };
    
           var searchResponse = _client.Search<ElasticIndexGroupProduct>(searchRequest);

          var categoryFlowsGlobe = new List<string>();
          var allAggregations = searchResponse.Aggregations.Global("globle_filter_aggrigation");
          var categories = allAggregations.Terms("category_flow");
          foreach (var aggItem in categories.Buckets)
          {
             if (!categoryFlowsGlobe.Any(x => x == aggItem.Key))
             {
               categoryFlowsGlobe.Add(aggItem.Key);
             }
           }
              
    }

解决方法

这是Post filter的确切用例-运行搜索请求以返回匹配结果和汇总,然后对汇总后的匹配项应用过滤已经计算了。

对于制造商,可以在搜索请求中使用术语汇总来检索它们-如果您需要退回所有制造商,则可以调整汇总的大小,否则,您可能决定只返回顶部x。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...