import io.searchbox.client.JestClient;
import io.searchbox.core.Search;
import io.searchbox.core.SearchResult;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.util.List;
@Slf4j
public abstract class EsRepository<T> {
@Autowired
private JestClient jestClient;
public List<T> searchByLikeTest(String indexName, String type){
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
QueryBuilder queryBuilder = QueryBuilders.boolQuery();
searchSourceBuilder.query(queryBuilder);
String query = searchSourceBuilder.toString();
Search search = new Search.Builder(query).addIndex(indexName).addType(type).build();
try {
SearchResult result = jestClient.execute(search);
List<T> dataList = result.getSourceAsObjectList(this.sourceType(), true);
return dataList;
} catch (IOException e) {
log.error("search document Exception: {}", e.getMessage());
return null;
}
}
public Class<T> sourceType() {
return (Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
}
import org.springframework.stereotype.Repository;
@Repository
public class TestRepository extends EsRepository<SiteData> {
}
@Autowired
private TestRepository testRepository;
@Test
public void test1(){
List<SiteData> siteDataList = testRepository.searchByLikeTest(SiteData.INDEX_NAME, SiteData.TYPE);
System.out.println(new Gson().toJson(siteDataList));
}