0

Hey ich muss in der Standard-Suche elasticsearch Sortierung nach höchster Genauigkeit der Ergebnisse wie implementieren es mithilfe von Federdaten elasticsearch, Federdaten Boot?Wie sortiere ich die Daten nach der höchsten Genauigkeit der Ergebnisse in elasticsearch mit Federdaten

Hier ist Beispielcode, wo Ich mag würde dies hinzufügen:

boolean issetPriceFrom = Optional.ofNullable(searchParams.getPriceFrom()).isPresent(); 
     boolean issetPriceTo = Optional.ofNullable(searchParams.getPriceTo()).isPresent(); 

     final List<FilterBuilder> filters = Lists.newArrayList(); 
     final NativeSearchQueryBuilder searchQuery = new NativeSearchQueryBuilder().withQuery(matchAllQuery()); 

     Optional.ofNullable(searchParams.getBuyer()).ifPresent(v -> filters.add(boolFilter().must(termFilter("buyer", v)))); 
     Optional.ofNullable(searchParams.getCat()).ifPresent(v -> filters.add(boolFilter().must(termFilter("cat", v)))); 
     Optional.ofNullable(searchParams.getComment_type()).ifPresent(v -> filters.add(boolFilter().must(termFilter("comment_type", v)))); 
     Optional.ofNullable(searchParams.getItem()).ifPresent(v -> filters.add(boolFilter().must(termFilter("item", v)))); 
     Optional.ofNullable(searchParams.getSeller()).ifPresent(v -> filters.add(boolFilter().must(termFilter("seller", v)))); 
     Optional.ofNullable(searchParams.getTree_cat()).ifPresent(v -> filters.add(boolFilter().must(termFilter("tree_cat", v)))); 

     final BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder(); 

     //access for many sellers 
     if (searchParams.getSellers() != null) { 
//   Optional.ofNullable(searchParams.getSellers().split(",")).ifPresent(v -> { 
//    filters.add(boolFilter().must(termsFilter("seller", v))); 
//   }); 

      for (String user : searchParams.getSellers().split(",")) { 
       boolQueryBuilder.must(queryStringQuery(user).field("seller")); 
      } 
     } 

     //access for many categories 
     if (searchParams.getCats() != null) { 
//   Optional.ofNullable(searchParams.getCats().split(",")).ifPresent(v -> { 
//    filters.add(boolFilter().must(termsFilter("cat", v))); 
//   }); 
      for (String category : searchParams.getCats().split(",")) { 
       boolQueryBuilder.must(queryStringQuery(category).field("cat")); 
      } 
     } 

     if (Optional.ofNullable(searchParams.getTitle()).isPresent()) { 
      boolQueryBuilder.must(queryStringQuery(searchParams.getTitle()).analyzeWildcard(true).field("title")); 
     } 

     if (Optional.ofNullable(searchParams.getComment_text()).isPresent()) { 
      boolQueryBuilder.must(queryStringQuery(searchParams.getComment_text()).analyzeWildcard(true).field("comment_text")); 
     } 

     if (issetPriceFrom || issetPriceTo) { 
      filters.add(rangeFilter("price").from(searchParams.getPriceFrom()).to(searchParams.getPriceTo())); 
     } 

     if (Optional.ofNullable(searchParams.getTsFrom()).isPresent() 
       || Optional.ofNullable(searchParams.getTsTo()).isPresent()) { 
      filters.add(rangeFilter("ts").from(searchParams.getTsFrom()).to(searchParams.getTsTo())); 
     } 

     if (hasComments != null && hasComments.equals(true)) { 
      filters.add(FilterBuilders.boolFilter().must(FilterBuilders.existsFilter("comment_text"))); 
     } 

     if (hasComments != null && hasComments.equals(false)) { 
      filters.add(FilterBuilders.boolFilter().must(FilterBuilders.missingFilter("comment_text"))); 
     } 

     searchQuery.withQuery(boolQueryBuilder); 
     FilterBuilder[] filterArr = new FilterBuilder[filters.size()]; 
     filterArr = filters.toArray(filterArr); 
     searchQuery.withFilter(andFilter(filterArr)); 

     if (pageable != null) { 
      searchQuery.withPageable(pageable); 
     } 

     return searchQuery; 

Ich wäre dankbar, wenn ich noch ein Stück Code bekam, die implementieren könnte.

Danke!

Antwort

1

Sie müssen nur withSort verwenden method.Use es wie folgt aus:

SortBuilder sortBuilder = SortBuilders.fieldSort(fieldName).order(SortOrder.ASC) 

    NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder().withQuery(matchAllQuery()) 
      .withSort(sortBuilder) 

this helps ..

+0

hmmm ich mehr im Sinn hatte, wenn ich mich nicht irre, "Score" die Idee ist es, die Daten sortierbar zu machen, als ob sie am wertvollsten wären. – rad11

+0

Wenn ich nicht falsch liege, bekommt ES standardmäßig das Ergebnis sortiert nach der Punktzahl. – Richa

Verwandte Themen