elasticsearch-query-tookit
====================================
版本
-------------
sql2dsl version | ES version
-----------|-----------
master | 2.4.4
2.x | 2.4.4
1.x | 1.4.5
介绍
-------------
> `elasticsearch-query-tookit`是一款elasticsearch查询编程工具包,提供Java编程接口,支持SQL解析生成DSL,支持JDBC驱动,支持和spring、ibatis集成
## 一、SQL解析生成DSL使用示例
```java
String sql = "select * from index.order where status='SUCCESS' order by nvl(pride, 0) asc routing by 'JD' limit 0, 20";
ElasticSql2DslParser sql2DslParser = new ElasticSql2DslParser();
//解析SQL
ElasticSqlParseResult parseResult = sql2DslParser.parse(sql);
//生成DSL,可用于rest api调用
String dsl = parseResult.toDsl();
//toRequest方法接收一个clinet对象参数,用于生成SearchRequestBuilder
SearchRequestBuilder searchReq = parseResult.toRequest(esClient);
//执行查询
SearchResponse response = searchReq.execute().actionGet();
```
## 二、集成IBatis、Spring
首先在Spring配置文件中增加如下代码
1. 指定driverClassName:org.elasticsearch.jdbc.ElasticDriver
2. 指定连接ES的连接串:jdbc:elastic:192.168.0.109:9300/product_cluster
3. 创建一个SqlMapClient对象,并指定sqlMapConfig.xml路径
```bash
```
sqlMapConfig.xml文件内容如下:
```bash
```
PRODUCT.xml文件中声明select sql语句
```bash
```
编写对应DAO代码:
```bash
@Repository
public class ProductDao {
@Autowired
@Qualifier("sqlMapClient")
private SqlMapClient sqlMapClient;
public List getProductByCodeAndMatchWord(String matchWord, String productCode) throws SQLException {
Map paramMap = Maps.newHashMap();
paramMap.put("productCode", productCode);
paramMap.put("advicePrice", 1000);
paramMap.put("routingVal", "A");
paramMap.put("matchWord", matchWord);
paramMap.put("prefixWord", matchWord);
String responseGson = (String) sqlMapClient.queryForObject("PRODUCT.getProductByCodeAndMatchWord", paramMap);
JdbcSearchResponseResolver responseResolver = new JdbcSearchResponseResolver(responseGson);
JdbcSearchResponse searchResponse = responseResolver.resolveSearchResponse(Product.class);
return searchResponse.getDocList();
}
}
```
编写测试方法
```bash
@Test
public void testProductQuery() throws Exception {
BeanFactory factory = new ClassPathXmlApplicationContext("application-context.xml");
ProductDao productDao = factory.getBean(ProductDao.class);
List productList = productDao.getProductByCodeAndMatchWord("iphone 6s", "IP_6S");
for (Product product : productList) {
System.out.println(product.getProductName());
}
}
```
作者: [@陈楠][1]
Email: 465360798@qq.com
<完>