public DtoSearchResult Fulltext(DtoSearchRequest request)
        {
            var watch = System.Diagnostics.Stopwatch.StartNew();

            var result = SearchRepository.Fulltext(request);

            watch.Stop();
            result.QueryTime = $"{watch.ElapsedMilliseconds} ms";
            return(result);
        }
示例#2
0
        public static DtoSearchResult Fulltext(DtoSearchRequest request)
        {
            var client = ElasticClientFactory.GetElasticClient();
            var result = client.Search <DtoSearch>(s => s
                                                   .Sort(order =>
                                                         order.Descending(p => p.Views))
                                                   .From(request.From)
                                                   .Size(request.Take)
                                                   .Query(q => q               // define query
                                                          .MultiMatch(mp => mp // of type MultiMatch
                                                                      .Fields(f => f
                                                                              .Field(p => p.Product, 3)
                                                                              .Field(p => p.SkuName, 2.5)
                                                                              .Field(p => p.Serving, 2.5)
                                                                              .Field(p => p.Producer, 2)
                                                                              .Field(p => p.Principles, 2)
                                                                              .Field(p => p.Categories, 1))
                                                                      .Query(request.Query)
                                                                      .Analyzer("standard")
                                                                      .Boost(1.1)
                                                                      .Slop(2)
                                                                      .Fuzziness(Fuzziness.Auto)
                                                                      .PrefixLength(2)
                                                                      .MaxExpansions(2)
                                                                      .Operator(Operator.Or)
                                                                      .MinimumShouldMatch(2)
                                                                      .FuzzyRewrite(MultiTermQueryRewrite.ConstantScoreBoolean)
                                                                      .TieBreaker(1.1)
                                                                      .CutoffFrequency(0.001)
                                                                      .Lenient()
                                                                      .ZeroTermsQuery(ZeroTermsQuery.All)
                                                                      )));



            var resultObj = result.Documents;

            return(new DtoSearchResult()
            {
                Result = resultObj?.ToList(),
                Request = request
            });
        }
示例#3
0
        public DtoSearchResult Fulltext(DtoSearchRequest request)
        {
            var query = @"{
                                ""function_score"": { 
                                  ""query"": { 
                                    ""multi_match"": {
                                      ""query"":    """ + (request.Query) + @""",
                                      ""fields"": [ ""product"", ""serving"" ]
                                    }
                                  },
                                 ""field_value_factor"": {
                                    ""field"":    ""views"",
                                    ""modifier"": ""log1p"",
                                    ""factor"":   0.1
                                  },
                                  ""boost_mode"": ""sum"" 
                                }
                              }";

            var elasticQuery = new SearchRequest
            {
                Size  = request.Take,
                From  = request.From,
                Query = new RawQuery(query),
            };


            var result = ElasticClient.Search <DtoSearch>(elasticQuery);


            var resultObj = result.Documents;

            return(new DtoSearchResult()
            {
                Result = resultObj?.ToList(),
                Request = request,
                Total = result.Total
            });
        }
示例#4
0
 public DtoSearchResult Fulltext([FromUri] DtoSearchRequest request)
 {
     return(SearchDomain.Fulltext(request));
 }