package me.osm.gazetteer.web.api.search;
import java.util.List;
import me.osm.gazetteer.web.api.query.QToken;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.FuzzyQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
public class SearchBuilderOld extends SearchBuilderImpl {
@Override
protected void addTermsNotStrict(List<QToken> required,
BoolQueryBuilder requiredQ) {
for(QToken t : required) {
String term = t.toString();
if(t.isFuzzied()) {
term = StringUtils.join(t.getVariants(), ' ');
}
// In not strict variant term must appears in search field or in name of nearby street
// Also add fuzzines
QueryBuilder search = QueryBuilders.fuzzyQuery("search", term).boost(20);
QueryBuilder nearestN = QueryBuilders.matchQuery("nearest_neighbour.name", term).boost(10);
QueryBuilder nearestS = QueryBuilders.matchQuery("nearby_streets.name", term).boost(0.2f);
if(!t.isFuzzied()) {
// If term wasn't fuzzied duiring analyze, add fuzzyness
((FuzzyQueryBuilder) search).fuzziness(Fuzziness.ONE);
}
requiredQ.should(QueryBuilders.disMaxQuery().tieBreaker(0.4f)
.add(search)
.add(nearestS)
.add(nearestN));
}
}
}