我正在使用ES 1.7.2,这是我的映射:
{
"template":"products*",
"mappings":{
"Product":{
"dynamic":"false",
"properties":{
"id":{
"type":"long"
},
"name":{
"type":"string",
"analyzer":"standard"
},
"score":{
"type":"double"
},
"reviews":{
"type":"nested",
"dynamic":"false",
"properties":{
"positive":{
"type":"nested",
"dynamic":"false",
"properties":{
"reviewCount":{
"type":"integer"
},
"quote":{
"type":"string",
"analyzer":"standard"
},
"aspects":{
"type":"nested",
"dynamic":"false",
"properties":{
"id":{
"type":"long"
},
"name":{
"type":"string",
"analyzer":"standard"
},
"score":{
"type":"double"
},
"frequency":{
"type":"integer"
}
}
}
}
}
}
}
}
}
}
}
我想对一个查询进行编码,该查询会匹配包含特定reviews.positive.aspects.id
且score
高于X的产品,如果score
,结果将按reviews.positive.aspects.frequency
排序高于Y,否则按reviews.positive.aspects.frequency
排序。我正在尝试以下方法,但没有好处:
RangeFilterBuilder productScoreFilter = rangeFilter( "score" ).from( productScore ).includeLower( true );
QueryBuilder productScoreQuery = filteredQuery( matchAllQuery(), andFilter( productScoreFilter ) );
client.prepareSearch( "products" ).
setQuery( productScoreQuery ).
setSize( resultsCount ).
addSort( fieldSort("score").order( SortOrder.DESC).setNestedFilter(rangeFilter("reviews.positive.aspects.frequency").gte("50") ) ).
setSearchType( SearchType.QUERY_THEN_FETCH ).
get();
但结果并没有按照我的意愿排序。从阅读中我认为我应该使用基于脚本的排序,但我不确定它如何与嵌套排序一起使用。任何帮助表示赞赏。
感谢。
答案 0 :(得分:0)
我不确定如果这是唯一的问题,请在排序时尝试设置嵌套路径以及嵌套过滤器。我最近在通过嵌套字段排序时将其运行到类似的问题。