Search in sources :

Example 1 with ScoreFunctionBuilder

use of org.opensearch.index.query.functionscore.ScoreFunctionBuilder in project fess by codelibs.

the class KeyMatchHelper method getBoostedDocumentList.

public List<Map<String, Object>> getBoostedDocumentList(final KeyMatch keyMatch) {
    final SearchEngineClient searchEngineClient = ComponentUtil.getSearchEngineClient();
    String virtualHost = keyMatch.getVirtualHost();
    if (StringUtil.isBlank(virtualHost)) {
        virtualHost = StringUtil.EMPTY;
    }
    final List<Tuple3<String, QueryBuilder, ScoreFunctionBuilder<?>>> boostList = getQueryMap(virtualHost).get(toLowerCase(keyMatch.getTerm()));
    if (boostList == null) {
        return Collections.emptyList();
    }
    for (final Tuple3<String, QueryBuilder, ScoreFunctionBuilder<?>> pair : boostList) {
        if (!keyMatch.getId().equals(pair.getValue1())) {
            continue;
        }
        final FessConfig fessConfig = ComponentUtil.getFessConfig();
        return searchEngineClient.getDocumentList(fessConfig.getIndexDocumentSearchIndex(), searchRequestBuilder -> {
            searchRequestBuilder.setPreference(Constants.SEARCH_PREFERENCE_LOCAL).setQuery(pair.getValue2()).setSize(keyMatch.getMaxSize());
            return true;
        });
    }
    return Collections.emptyList();
}
Also used : ScoreFunctionBuilder(org.opensearch.index.query.functionscore.ScoreFunctionBuilder) Tuple3(org.codelibs.core.misc.Tuple3) SearchEngineClient(org.codelibs.fess.es.client.SearchEngineClient) QueryBuilder(org.opensearch.index.query.QueryBuilder) BoolQueryBuilder(org.opensearch.index.query.BoolQueryBuilder) FessConfig(org.codelibs.fess.mylasta.direction.FessConfig)

Example 2 with ScoreFunctionBuilder

use of org.opensearch.index.query.functionscore.ScoreFunctionBuilder in project fess by codelibs.

the class KeyMatchHelper method load.

@Override
public int load() {
    final FessConfig fessConfig = ComponentUtil.getFessConfig();
    final Map<String, Map<String, List<Tuple3<String, QueryBuilder, ScoreFunctionBuilder<?>>>>> keyMatchQueryMap = new HashMap<>();
    getAvailableKeyMatchList().stream().forEach(keyMatch -> {
        try {
            final BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
            if (logger.isDebugEnabled()) {
                logger.debug("Loading KeyMatch Query: {}, Size: {}", keyMatch.getQuery(), keyMatch.getMaxSize());
            }
            getDocumentList(keyMatch).stream().map(doc -> {
                if (logger.isDebugEnabled()) {
                    logger.debug("Loaded KeyMatch doc: {}", doc);
                }
                return DocumentUtil.getValue(doc, fessConfig.getIndexFieldDocId(), String.class);
            }).forEach(docId -> {
                boolQuery.should(QueryBuilders.termQuery(fessConfig.getIndexFieldDocId(), docId));
            });
            if (boolQuery.hasClauses()) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Loaded KeyMatch Boost Query: {}", boolQuery);
                }
                String virtualHost = keyMatch.getVirtualHost();
                if (StringUtil.isBlank(virtualHost)) {
                    virtualHost = StringUtil.EMPTY;
                }
                Map<String, List<Tuple3<String, QueryBuilder, ScoreFunctionBuilder<?>>>> queryMap = keyMatchQueryMap.get(virtualHost);
                if (queryMap == null) {
                    queryMap = new HashMap<>();
                    keyMatchQueryMap.put(virtualHost, queryMap);
                }
                final String termKey = toLowerCase(keyMatch.getTerm());
                List<Tuple3<String, QueryBuilder, ScoreFunctionBuilder<?>>> boostList = queryMap.get(termKey);
                if (boostList == null) {
                    boostList = new ArrayList<>();
                    queryMap.put(termKey, boostList);
                }
                boostList.add(new Tuple3<>(keyMatch.getId(), boolQuery, ScoreFunctionBuilders.weightFactorFunction(keyMatch.getBoost())));
            } else if (logger.isDebugEnabled()) {
                logger.debug("No KeyMatch boost docs");
            }
            waitForNext();
        } catch (final Exception e) {
            logger.warn("Cannot load {}", keyMatch, e);
        }
    });
    this.keyMatchQueryMap = keyMatchQueryMap;
    return keyMatchQueryMap.size();
}
Also used : Constants(org.codelibs.fess.Constants) DocumentUtil(org.codelibs.fess.util.DocumentUtil) ScoreFunctionBuilder(org.opensearch.index.query.functionscore.ScoreFunctionBuilder) HashMap(java.util.HashMap) SearchEngineClient(org.codelibs.fess.es.client.SearchEngineClient) SearchConditionBuilder(org.codelibs.fess.es.client.SearchEngineClient.SearchConditionBuilder) ArrayList(java.util.ArrayList) SearchRequestType(org.codelibs.fess.entity.SearchRequestParams.SearchRequestType) FessConfig(org.codelibs.fess.mylasta.direction.FessConfig) KeyMatchBhv(org.codelibs.fess.es.config.exbhv.KeyMatchBhv) Locale(java.util.Locale) Map(java.util.Map) KeyMatch(org.codelibs.fess.es.config.exentity.KeyMatch) QueryBuilders(org.opensearch.index.query.QueryBuilders) StringUtil(org.codelibs.core.lang.StringUtil) ScoreFunctionBuilders(org.opensearch.index.query.functionscore.ScoreFunctionBuilders) Tuple3(org.codelibs.core.misc.Tuple3) List(java.util.List) Logger(org.apache.logging.log4j.Logger) QueryBuilder(org.opensearch.index.query.QueryBuilder) ComponentUtil(org.codelibs.fess.util.ComponentUtil) PostConstruct(javax.annotation.PostConstruct) FilterFunctionBuilder(org.opensearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder) Collections(java.util.Collections) LogManager(org.apache.logging.log4j.LogManager) BoolQueryBuilder(org.opensearch.index.query.BoolQueryBuilder) ScoreFunctionBuilder(org.opensearch.index.query.functionscore.ScoreFunctionBuilder) HashMap(java.util.HashMap) QueryBuilder(org.opensearch.index.query.QueryBuilder) BoolQueryBuilder(org.opensearch.index.query.BoolQueryBuilder) FessConfig(org.codelibs.fess.mylasta.direction.FessConfig) BoolQueryBuilder(org.opensearch.index.query.BoolQueryBuilder) Tuple3(org.codelibs.core.misc.Tuple3) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map)

Aggregations

Tuple3 (org.codelibs.core.misc.Tuple3)2 SearchEngineClient (org.codelibs.fess.es.client.SearchEngineClient)2 FessConfig (org.codelibs.fess.mylasta.direction.FessConfig)2 BoolQueryBuilder (org.opensearch.index.query.BoolQueryBuilder)2 QueryBuilder (org.opensearch.index.query.QueryBuilder)2 ScoreFunctionBuilder (org.opensearch.index.query.functionscore.ScoreFunctionBuilder)2 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Locale (java.util.Locale)1 Map (java.util.Map)1 PostConstruct (javax.annotation.PostConstruct)1 LogManager (org.apache.logging.log4j.LogManager)1 Logger (org.apache.logging.log4j.Logger)1 StringUtil (org.codelibs.core.lang.StringUtil)1 Constants (org.codelibs.fess.Constants)1 SearchRequestType (org.codelibs.fess.entity.SearchRequestParams.SearchRequestType)1 SearchConditionBuilder (org.codelibs.fess.es.client.SearchEngineClient.SearchConditionBuilder)1 KeyMatchBhv (org.codelibs.fess.es.config.exbhv.KeyMatchBhv)1