Hi,
I want to upgrade from ES 1.7 to 6.0. I made all necessary changes and now I have a problem with FunctionScoreQueryBuilder.
I create a BoolQueryBuilder filter and works fine. Now I want to add score to my results but I can't use this filter in FunctionScoreQueryBuilder because of its type.
Here is my code using in ES 1.7
FunctionScoreQueryBuilder fsqb = new FunctionScoreQueryBuilder(QueryBuilders.filteredQuery(!esc.keywords ? QueryBuilders.matchAllQuery() : QueryBuilders.wildcardQuery("searchField", ""+esc.keywords.toUpperCase()+""), andFilter));
fsqb.add(ScoreFunctionBuilders.scriptFunction("_score * (doc['bocHotelId'].value!=0? 50000:1) "))
fsqb.add(ScoreFunctionBuilders.scriptFunction("_score * (doc['bookingUrl'].value!=null && doc['bookingUrl'].value!='null' && doc['bookingUrl'].value!='' ? 40000:1) "))
fsqb.add(ScoreFunctionBuilders.scriptFunction("_score * (doc['claimed'].value!=0? 30000:1) "))
fsqb.add(ScoreFunctionBuilders.scriptFunction("_score * (doc['logoFilename'].value!=null && doc['logoFilename'].value!=''? 20000:1) "))
fsqb.add(ScoreFunctionBuilders.scriptFunction("_score * (doc['source'].value.equals('filoxeno') && doc['source'].value!=null? 10000:1) "))
And this is my code for filter creation in ES 6.0
def buildFilter(ElasticSearchCriteria esc){
BoolQueryBuilder andfilter = new BoolQueryBuilder();
if(esc.polygonType.equals("periphery")){
andfilter.filter(QueryBuilders.termQuery("municipality",esc.polygonId))
/*filter=FilterBuilders.termFilter("periphery", esc.polygonId)*/
}
else if(esc.polygonType.equals("state")){
andfilter.filter(QueryBuilders.termQuery("state",esc.polygonId))
}else if(esc.test.equals("yes")){
andfilter.filter(QueryBuilders.termQuery("municipality",esc.polygonId))
/*filter=FilterBuilders.termFilter("municipality", esc.polygonId)*/
}
else{
andfilter.filter(QueryBuilders.termQuery("municipality",esc.polygonId))
}
if(esc.type.equals("accommodation")){
andfilter.filter(QueryBuilders.termQuery("filoxenoType",esc.type))
}
else if(esc.type.equals("restaurant")){
andfilter.filter(QueryBuilders.termQuery("filoxenoType",esc.type))
}
else if(esc.type.equals("rental")){
andfilter.filter(QueryBuilders.termQuery("filoxenoType",esc.type))
}
else if(esc.type.equals("activity")){
andfilter.filter(QueryBuilders.termQuery("filoxenoType",esc.type))
}
else{
andfilter.filter(QueryBuilders.termQuery("filoxenoType",esc.type))
}
andfilter.filter(QueryBuilders.termQuery("language",esc.language))
andfilter.filter(QueryBuilders.termQuery("published",1))
esc.terms.each{ k, v ->
if(k.toString().contains(".")){
if( !v[0].getClass().isArray() ){
andfilter.filter(QueryBuilders.nestedQuery(k.toString().split(/\./)[0],QueryBuilders.termQuery(k.toString(), v[0]),ScoreMode.None))
}
else{
v[0].each {
andfilter.filter(QueryBuilders.nestedQuery(k.toString().split(/\./)[0],QueryBuilders.termQuery(k.toString(), it),ScoreMode.None))
}
}
}else if(k.toString().contains("availability")){
andfilter.filter(QueryBuilders.existsQuery("bookingUrl"))
}
else{
if( !v[0].getClass().isArray() ){
andfilter.filter(QueryBuilders.termQuery(k, v[0]))
}
else{
v[0].each {
andfilter.filter(QueryBuilders.termQuery(k, it))
}
}
}
}
if(esc.keywords){
andfilter.filter(QueryBuilders.wildcardQuery("searchField", "*"+esc.keywords.toUpperCase()+"*"))
}
return andfilter
}
Is there any idea how can I use FunctionScoreQueryBuilder with this filter, or how can I change this filter in order to use it in FunctionScoreQueryBuilder??
Thank you in advance!!