/** * Gets the language to use for parsing. If this is explicitly set in the model, that language is returned. * Otherwise, if a query tree is already produced and any node in it specifies a language the first such * node encountered in a depth first * left to right search is returned. Otherwise the language is guessed from the query string. * If this does not yield an actual language, English is returned as the default. * * @return the language determined, never null */ // TODO: We can support multiple languages per query by changing searchers which call this // to look up the query to use at each point from item.getLanguage // with this as fallback for query branches where no parent item specifies language public Language getParsingLanguage(String languageDetectionText) { Language language = getLanguage(); if (language != null) return language; language = Language.fromEncoding(encoding); if (language != Language.UNKNOWN) return language; if (queryTree != null) language = languageBelow(queryTree); if (language != Language.UNKNOWN) return language; Linguistics linguistics = execution.context().getLinguistics(); if (linguistics != null) language = linguistics.getDetector().detect(languageDetectionText, null).getLanguage(); // TODO: Set language if detected if (language != Language.UNKNOWN) return language; return Language.ENGLISH; }
public static Parsable fromQueryModel(Model model) { return new Parsable() .setModel(model) .setQuery(model.getQueryString()) .setFilter(model.getFilter()) .setExplicitLanguage(Optional.ofNullable(model.getLanguage())) .setDefaultIndexName(model.getDefaultIndex()) .addSources(model.getSources()) .addRestricts(model.getRestrict()) .setSelect(model.getParent().getSelect()); }
if (key.last().equals(Model.FILTER)) return model.getFilter(); if (key.last().equals(Model.DEFAULT_INDEX)) return model.getDefaultIndex(); if (key.last().equals(Model.LANGUAGE)) return model.getLanguage(); if (key.last().equals(Model.LOCALE)) return model.getLocale(); if (key.last().equals(Model.ENCODING)) return model.getEncoding();