下边就开始elasticsearch的查询操作,用的是TransportClient客户端。
elasticsearch是java的开发的对罐子是强依赖,要注意版本依赖
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.33</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
这里要注意把Spring boot中集成elasticsearch去掉,不然会自动找那个包,启动会报错。
TransportClient客户端实例配置
@Bean
public TransportClient getClient() throws UnknownHostException{
System.out.println("---------------init es client");
InetSocketTransportAddress node = new InetSocketTransportAddress(
InetAddress.getByName(serverHost),9300 //ip
);
Settings setttings = Settings.builder()
.put("client.transport.sniff", true)
.put("cluster.name", clusterName).build(); //集群名字
TransportClient client = new PreBuiltTransportClient(setttings);
client.addTransportAddress(node);
return client;
}
控制器层,因为是个演示所以不分层了,直接在控制器层返回
*/
@RestController
@RequestMapping("/book")
public class AccountController {
@Autowired
TransportClient client;
@RequestMapping(value = "/novel/get", method= RequestMethod.GET)
@ResponseBody
public ResponseEntity findById(@RequestParam(name = "id") String id){
GetResponse result = client.prepareGet("account_info","detail",id).get();
if(!result.isExists()){
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
return new ResponseEntity(result.getSource(), HttpStatus.OK);
}
@RequestMapping(value = "/novel/list", method= RequestMethod.GET)
@ResponseBody
public JSONObject findListAll(
@RequestParam(name = "from",defaultValue = "0") Integer offset
,@RequestParam(name = "size",defaultValue = "50") Integer limit
) {
SearchRequestBuilder builder = Client.prepareSearch("Index")
.setTypes("type")
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setFrom(from)
.setSize(size);
System.out.println(builder);
SearchResponse response = builder.get();
List<Map<String,Object>> result = new ArrayList<Map<String, Object>>();
for (SearchHit hit:response.getHits()){
result.add(hit.getSource());
}
List result = null;
try {
result = accountService.findListAll(from,size);
}catch (Exception e){
return new ResponseEntity(HttpStatus.NOT_FOUND);
}
String string = JSON.toJSONString(result); //多加两个json字段返回给前端
JSONObject object = new JSONObject();
object.put("size",result.size());
object.put("content",string);
return object;
}
}
第一个方法是传入ID来找对应编号的数据,接口格式是<IP> <端口> /书/新颖/获得/?ID = 1
第二个方法是传入第几页和每页显示的条数(如果是第一页就是从= 0),格式是:<ip> <port> / book / novel / get /?from = 0&size = 10
返回后的JSON格式是
{
‘size’:5,
‘content’:[{....},{....},{....}]
}