java實現ElasticSearch通用查詢

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));
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章