首先新建一个maven工程,在pom中引入依赖
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-elasticsearch
com.alibaba
fastjson
1.2.11
com.sun.jna
jna
3.0.9
io.searchbox
jest
com.baomidou
mybatisplus-spring-boot-starter
1.0.4
com.baomidou
mybatis-plus
2.1.8
org.springframework.boot
spring-boot-starter-freemarker
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
然后在application.properties文件中设置各种配置信息
spring.mvc.static-path-pattern=/static/**
设置静态资源的位置
注:网上查资料说,这里spring boot应该自动映射到resources下去查找资源,但是我的工程中貌似无法加载js,css,所以只有自己指定静态资源的路径,静态资源加载问题解决!
spring.elasticsearch.jest.uris=http://192.168.152.129:9200
spring.elasticsearch.jest.read-timeout=5200
jest客户端连接设置
注意:这里jest客户端使用9200端口,是es默认的http形式管理端口
spring.freemarker.suffix=.html
spring.freemarker.templateEncoding=UTF-8
spring.freemarker.templateLoaderPath=classpath:/templates/
FreeMarker设置
然后是Controller类
@Controller
@RequestMapping("/bank")
public class BankController {
@Autowired
private BankService bankService;
@RequestMapping("/index")
public String index(HttpServletRequest request){
request.setAttribute("base", request.getContextPath());
return "bank/index";
}
@RequestMapping("/query")
public void query(HttpServletRequest request,HttpServletResponse response){
int draw = Integer.valueOf(request.getParameter("draw"));
int start = Integer.valueOf(request.getParameter("start"));
int length = Integer.valueOf(request.getParameter("length"));
int page = (start+length)/length;
PagepageObj = new Page (page,length);
Pagepager = bankService.queryAll(pageObj);
this.renderJson(response, this.toDataTable(pager, draw).toString());
}
@SuppressWarnings("rawtypes")
public com.alibaba.fastjson.JSONObject toDataTable(Page page,int draw){
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject.put("draw", draw);
jsonObject.put("recordsTotal", Long.valueOf(page.getTotal()));
jsonObject.put("recordsFiltered", Long.valueOf(page.getTotal()));
List list = page.getRecords();
com.alibaba.fastjson.JSONArray jsonarray = (JSONArray)JSONArray.toJSON(list);
jsonObject.put("data", jsonarray);
return jsonObject;
}
public void renderJson(HttpServletResponse response, String text) {
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
try {
response.getWriter().write(text);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Service类
public interface BankService {
public PagequeryAll(Page pageObj);
}
ServiceImpl
@Service
public class BankServiceImpl implements BankService {
@Autowired
private BankDao bankDao;
public PagequeryAll(Page pageObj){
Pagepage = new Page ();
String sort = "account_number";
SearchResult result = bankDao.queryAll(pageObj, Customer.INDEX_NAME, Customer.TYPE_NAME,sort);
List> list = result.getHits(Customer.class);
Listlc = new ArrayList ();
for(int i=0;ilc.add(list.get(i).source);
}
page.setTotal(result.getTotal());
page.setRecords(lc);
return page;
}
}
Dao类
public interface BankDao {
publicSearchResult queryAll(Page pageObj,String index,String type,String sort);
}
DaoImpl类
@Service
public class BankDaoImpl implements BankDao {
@Autowired
private JestClient jestClient;
SearchResult result;
publicSearchResult queryAll(Page pageObj,String index,String type,String sort){
try{
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.from((pageObj.getCurrent()-1)*pageObj.getSize());
searchSourceBuilder.size(pageObj.getSize());
searchSourceBuilder.sort(sort);
Search search = new Search.Builder(searchSourceBuilder.toString())
.addIndex(index).addType(type).build();
result=jestClient.execute(search);
}catch(Exception e){
System.out.println(e.getMessage());
}
return result;
}
}
Custonmer类
public class Customer {
public static final String INDEX_NAME = "bank";
public static final String TYPE_NAME = "account";
public int account_number;
public long balance;
public String firstname;
public String lastname;
public long age;
public String gender;
public String address;
public String employer;
public String email;
public String city;
public String state;
@JestId
public String id;
}
各属性的get和set方法在这里就省略了
前台使用Jquery的Datatable框架
用户管理
bootstrap和datatable的js和css网上可以下载到
然后是自定义的bank.js
$(function(){
//加载表格数据
var grid = new Datatable();
grid.init({
src: $("#list-table"),
onSuccess: function(grid) {},
onError: function(grid) {},
dataTable: {
"columns": [{
"data": "account_number",
"sClass":"text-center",
"bSortable": false,
"sWidth":"100px"
},{
"data": "firstname",
"sClass":"text-center",
"bSortable": false
},{
"data": "lastname",
"sClass":"text-center",
"bSortable": false
},{
"data": "age",
"sClass":"text-center",
"bSortable": false,
"sWidth":"150px"
},{
"data": "balance",
"bSortable": false,
"sClass":"text-center"
},{
"data": "gender",
"bSortable": false,
"sClass":"text-center"
},{
"data": "state",
"sClass":"text-center",
"bSortable": false
}
],
"columnDefs": [{
"targets": [0],
"render": function(data,type,full){
return ""+data+"";
}
},
{
"targets": [1],
"render": function(data, type, full) {
return ""+data+"";
}},
{
"targets": [2],
"render": function(data, type, full) {
return ""+data+"";
}},
{
"targets": [3],
"render": function(data, type, full) {
return ""+data+"";
}
},
{
"targets": [4],
"render": function(data, type, full) {
return ""+data+"";
}
},
{
"targets": [5],
"render": function(data, type, full) {
return ""+data+"";
}
},
{
"targets": [6],
"render": function(data, type, full) {
return ""+data+"";
}
}
],
"bProcessing": true,
"pageLength": 10,
"ajax": {
"url": getRootPath() + '/bank/query',
'data' : function (d) {
d.name=$('#name').val();
}
}
}
});
)
代码基本结束了,输入地址 localhost:8080/bank/index 访问
我提前从网上下载了一些资源导入到自己导elasticsearch中
你可以从这里下载一些资源(account.json)到当前目录下,然后使用如下的命令把它加载到自己的集群中:
curl -H "Content-Type: application/json" -XPOST 'localhost:9200/bank/account/_bulk?pretty&refresh' --data-binary "@accounts.json"
curl 'localhost:9200/_cat/indices?v'
返回结果为:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open bank l7sSYV2cQXmu6_4rJWVIww 5 1 1000 0 128.6kb 128.6kb
说明导入成功。
参考:https://blog.csdn.net/hololens/article/details/78932628
这里通过在SearchSourceBuilder设置form和size实现分页(Elasticsearch默认查询显示是10条)
在查资料的过程中发现,看到有使用Sliced和Scroll滚动id方式进行分页查询的,不过奈何本人初学es,没看明白,所以暂且用这种方式吧就
如有错误,敬请指出,谢谢~