All Downloads are FREE. Search and download functionalities are using the official Maven repository.

querqy.rewrite.contrib.NumberUnitRewriterFactory Maven / Gradle / Ivy

There is a newer version: 3.18.1
Show newest version
package querqy.rewrite.contrib;

import querqy.model.ExpandedQuery;
import querqy.model.Term;
import querqy.rewrite.QueryRewriter;
import querqy.rewrite.RewriterFactory;
import querqy.rewrite.SearchEngineRequestAdapter;
import querqy.rewrite.contrib.numberunit.NumberUnitQueryCreator;
import querqy.rewrite.contrib.numberunit.model.NumberUnitDefinition;
import querqy.rewrite.contrib.numberunit.model.PerUnitNumberUnitDefinition;
import querqy.trie.State;
import querqy.trie.TrieMap;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

public class NumberUnitRewriterFactory extends RewriterFactory {

    private final TrieMap> numberUnitMap;
    private final NumberUnitQueryCreator numberUnitQueryCreator;

    public NumberUnitRewriterFactory(final String id,
                                     final List numberUnitDefinitions,
                                     final NumberUnitQueryCreator numberUnitQueryCreator) {
        super(id);
        this.numberUnitMap = createNumberUnitMap(numberUnitDefinitions);
        this.numberUnitQueryCreator = numberUnitQueryCreator;
    }

    private TrieMap> createNumberUnitMap(
            List numberUnitDefinitions) {

        final TrieMap> map = new TrieMap<>();

        numberUnitDefinitions.forEach(numberUnitDefinition ->
                numberUnitDefinition.unitDefinitions.forEach(unitDefinition -> {

                    final State> state = map.get(unitDefinition.term)
                            .getStateForCompleteSequence();

                    final PerUnitNumberUnitDefinition def = new PerUnitNumberUnitDefinition(numberUnitDefinition,
                            unitDefinition.multiplier);

                    if (state.isFinal()) {
                        state.value.add(def);

                    } else {
                        final List newList = new ArrayList<>();
                        newList.add(def);
                        map.put(unitDefinition.term, newList);
                    }
                }));

        return map;
    }

    @Override
    public QueryRewriter createRewriter(final ExpandedQuery input,
                                        final SearchEngineRequestAdapter searchEngineRequestAdapter) {
        return new NumberUnitRewriter(numberUnitMap, numberUnitQueryCreator);
    }

    @Override
    public Set getGenerableTerms() {
        return QueryRewriter.EMPTY_GENERABLE_TERMS;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy