Assert.notNull(indexName,"No 'indexName' defined for MoreLikeThisQuery");
Assert.notNull(type, "No 'type' defined for MoreLikeThisQuery");
Assert.notNull(query.getId(), "No document id defined for MoreLikeThisQuery");
MoreLikeThisRequestBuilder requestBuilder =
client.prepareMoreLikeThis(indexName,type, query.getId());
if(query.getPageable() != null){
startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize();
requestBuilder.setSearchSize(query.getPageable().getPageSize());
}
requestBuilder.setSearchFrom(startRecord);
if(isNotEmpty(query.getSearchIndices())){
requestBuilder.setSearchIndices(toArray(query.getSearchIndices()));
}
if(isNotEmpty(query.getSearchTypes())){
requestBuilder.setSearchTypes(toArray(query.getSearchTypes()));
}
if(isNotEmpty(query.getFields())){
requestBuilder.setField(toArray(query.getFields()));
}
if(isNotBlank(query.getRouting())){
requestBuilder.setRouting(query.getRouting());
}
if(query.getPercentTermsToMatch() != null){
requestBuilder.setPercentTermsToMatch(query.getPercentTermsToMatch());
}
if(query.getMinTermFreq() != null){
requestBuilder.setMinTermFreq(query.getMinTermFreq());
}
if(query.getMaxQueryTerms() != null){
requestBuilder.maxQueryTerms(query.getMaxQueryTerms());
}
if(isNotEmpty(query.getStopWords())){
requestBuilder.setStopWords(toArray(query.getStopWords()));
}
if(query.getMinDocFreq() != null){
requestBuilder.setMinDocFreq(query.getMinDocFreq());
}
if(query.getMaxDocFreq() != null){
requestBuilder.setMaxDocFreq(query.getMaxDocFreq());
}
if(query.getMinWordLen() != null){
requestBuilder.setMinWordLen(query.getMinWordLen());
}
if(query.getMaxWordLen() != null){
requestBuilder.setMaxWordLen(query.getMaxWordLen());
}
if(query.getBoostTerms() != null){
requestBuilder.setBoostTerms(query.getBoostTerms());
}
SearchResponse response = requestBuilder.execute().actionGet();
return mapResults(response, clazz, query.getPageable());
}