Search in sources :

Example 1 with DirectCandidateGenerator

use of org.elasticsearch.search.suggest.phrase.PhraseSuggestionContext.DirectCandidateGenerator in project elasticsearch by elastic.

the class PhraseSuggestionBuilder method build.

@Override
public SuggestionContext build(QueryShardContext context) throws IOException {
    PhraseSuggestionContext suggestionContext = new PhraseSuggestionContext(context);
    MapperService mapperService = context.getMapperService();
    // copy over common settings to each suggestion builder
    populateCommonFields(mapperService, suggestionContext);
    suggestionContext.setSeparator(BytesRefs.toBytesRef(this.separator));
    suggestionContext.setRealWordErrorLikelihood(this.realWordErrorLikelihood);
    suggestionContext.setConfidence(this.confidence);
    suggestionContext.setMaxErrors(this.maxErrors);
    suggestionContext.setSeparator(BytesRefs.toBytesRef(this.separator));
    suggestionContext.setRequireUnigram(this.forceUnigrams);
    suggestionContext.setTokenLimit(this.tokenLimit);
    suggestionContext.setPreTag(BytesRefs.toBytesRef(this.preTag));
    suggestionContext.setPostTag(BytesRefs.toBytesRef(this.postTag));
    if (this.gramSize != null) {
        suggestionContext.setGramSize(this.gramSize);
    }
    for (List<CandidateGenerator> candidateGenerators : this.generators.values()) {
        for (CandidateGenerator candidateGenerator : candidateGenerators) {
            suggestionContext.addGenerator(candidateGenerator.build(mapperService));
        }
    }
    if (this.model != null) {
        suggestionContext.setModel(this.model.buildWordScorerFactory());
    }
    if (this.collateQuery != null) {
        Function<Map<String, Object>, ExecutableScript> compiledScript = context.getLazyExecutableScript(this.collateQuery, ScriptContext.Standard.SEARCH);
        suggestionContext.setCollateQueryScript(compiledScript);
        if (this.collateParams != null) {
            suggestionContext.setCollateScriptParams(this.collateParams);
        }
        suggestionContext.setCollatePrune(this.collatePrune);
    }
    if (this.gramSize == null || suggestionContext.generators().isEmpty()) {
        final ShingleTokenFilterFactory.Factory shingleFilterFactory = getShingleFilterFactory(suggestionContext.getAnalyzer());
        if (this.gramSize == null) {
            // try to detect the shingle size
            if (shingleFilterFactory != null) {
                suggestionContext.setGramSize(shingleFilterFactory.getMaxShingleSize());
                if (suggestionContext.getAnalyzer() == null && shingleFilterFactory.getMinShingleSize() > 1 && !shingleFilterFactory.getOutputUnigrams()) {
                    throw new IllegalArgumentException("The default analyzer for field: [" + suggestionContext.getField() + "] doesn't emit unigrams. If this is intentional try to set the analyzer explicitly");
                }
            }
        }
        if (suggestionContext.generators().isEmpty()) {
            if (shingleFilterFactory != null && shingleFilterFactory.getMinShingleSize() > 1 && !shingleFilterFactory.getOutputUnigrams() && suggestionContext.getRequireUnigram()) {
                throw new IllegalArgumentException("The default candidate generator for phrase suggest can't operate on field: [" + suggestionContext.getField() + "] since it doesn't emit unigrams. " + "If this is intentional try to set the candidate generator field explicitly");
            }
            // use a default generator on the same field
            DirectCandidateGenerator generator = new DirectCandidateGenerator();
            generator.setField(suggestionContext.getField());
            suggestionContext.addGenerator(generator);
        }
    }
    return suggestionContext;
}
Also used : DirectCandidateGenerator(org.elasticsearch.search.suggest.phrase.PhraseSuggestionContext.DirectCandidateGenerator) ShingleTokenFilterFactory(org.elasticsearch.index.analysis.ShingleTokenFilterFactory) ExecutableScript(org.elasticsearch.script.ExecutableScript) DirectCandidateGenerator(org.elasticsearch.search.suggest.phrase.PhraseSuggestionContext.DirectCandidateGenerator) HashMap(java.util.HashMap) Map(java.util.Map) MapperService(org.elasticsearch.index.mapper.MapperService)

Aggregations

HashMap (java.util.HashMap)1 Map (java.util.Map)1 ShingleTokenFilterFactory (org.elasticsearch.index.analysis.ShingleTokenFilterFactory)1 MapperService (org.elasticsearch.index.mapper.MapperService)1 ExecutableScript (org.elasticsearch.script.ExecutableScript)1 DirectCandidateGenerator (org.elasticsearch.search.suggest.phrase.PhraseSuggestionContext.DirectCandidateGenerator)1