@Override
public LinkedHashMap<LocalId, Float> resolve(Language language, String phrase, int maxPages) throws DaoException {
LinkedHashMap<LocalId, Float> result = new LinkedHashMap<LocalId, Float>();
WikiBrainScoreDoc[] wikibrainScoreDocs = searcher.getQueryBuilderByLanguage(language)
.setPhraseQuery(phrase)
.setNumHits(10)
.search();
if (wikibrainScoreDocs.length == 0 && phrase.indexOf(" ") < 0) {
String phraseMultiVersion = "";
for (int i = 1; i < phrase.length(); i++) {
phraseMultiVersion += (i > 2 ? phrase.substring(0, i) + " " : "");
phraseMultiVersion += (phrase.length() - i > 2 ? phrase.substring(i, phrase.length()) + " " : "");
}
wikibrainScoreDocs = searcher.getQueryBuilderByLanguage(language)
.setPhraseQuery(phraseMultiVersion)
.setNumHits(10)
.search();
}
float totalScore = 0;
for (WikiBrainScoreDoc wikibrainScoreDoc : wikibrainScoreDocs) {
totalScore += wikibrainScoreDoc.score;
}
for (WikiBrainScoreDoc wikibrainScoreDoc : wikibrainScoreDocs) {
int localPageId = searcher.getLocalIdFromDocId(wikibrainScoreDoc.luceneId, language);
LocalId localId = new LocalId(language, localPageId);
result.put(localId, wikibrainScoreDoc.score / totalScore);
}
return result;
}