Browse Source

fix #1727 add rescorer

Shinsuke Sugaya 7 years ago
parent
commit
02cfe80b35

+ 3 - 0
src/main/java/org/codelibs/fess/es/client/FessEsClient.java

@@ -1066,6 +1066,9 @@ public class FessEsClient implements Client {
                 searchRequestBuilder.setFetchSource(responseFields, null);
                 searchRequestBuilder.setFetchSource(responseFields, null);
             }
             }
 
 
+            // rescorer
+            stream(queryHelper.getRescorers()).of(stream -> stream.forEach(searchRequestBuilder::addRescorer));
+
             // sort
             // sort
             queryContext.sortBuilders().forEach(sortBuilder -> searchRequestBuilder.addSort(sortBuilder));
             queryContext.sortBuilders().forEach(sortBuilder -> searchRequestBuilder.addSort(sortBuilder));
 
 

+ 16 - 0
src/main/java/org/codelibs/fess/helper/QueryHelper.java

@@ -69,6 +69,8 @@ import org.elasticsearch.index.query.RangeQueryBuilder;
 import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
 import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
+import org.elasticsearch.search.rescore.QueryRescorerBuilder;
+import org.elasticsearch.search.rescore.RescorerBuilder;
 import org.elasticsearch.search.sort.SortBuilder;
 import org.elasticsearch.search.sort.SortBuilder;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortOrder;
 import org.elasticsearch.search.sort.SortOrder;
@@ -127,6 +129,8 @@ public class QueryHelper {
 
 
     protected List<FilterFunctionBuilder> boostFunctionList = new ArrayList<>();
     protected List<FilterFunctionBuilder> boostFunctionList = new ArrayList<>();
 
 
+    protected List<RescorerBuilder<?>> rescorerList = new ArrayList<>();
+
     @PostConstruct
     @PostConstruct
     public void init() {
     public void init() {
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
         final FessConfig fessConfig = ComponentUtil.getFessConfig();
@@ -947,4 +951,16 @@ public class QueryHelper {
     public void addBoostFunction(final QueryBuilder filter, final ScoreFunctionBuilder<?> scoreFunction) {
     public void addBoostFunction(final QueryBuilder filter, final ScoreFunctionBuilder<?> scoreFunction) {
         boostFunctionList.add(new FilterFunctionBuilder(filter, scoreFunction));
         boostFunctionList.add(new FilterFunctionBuilder(filter, scoreFunction));
     }
     }
+
+    public RescorerBuilder<?>[] getRescorers() {
+        return rescorerList.toArray(new RescorerBuilder<?>[rescorerList.size()]);
+    }
+
+    public void addRescorer(final RescorerBuilder<?> rescorer) {
+        rescorerList.add(rescorer);
+    }
+
+    public void addRescorer(final String query, final int windowSize) {
+        rescorerList.add(new QueryRescorerBuilder(QueryBuilders.wrapperQuery(query)).windowSize(windowSize));
+    }
 }
 }