elasticsearch是一個高度可擴展的開源全文搜索和分析引擎,能夠快速的、近實時地對大數據進行存儲、搜索和分析,用來支撐複雜的數據搜索需求和企業級應用,主要用於海量系統日誌的數據查詢與分析。
java
{ "name" : "YNFljfo", "cluster_name" : "my-application", "cluster_uuid" : "iuLpWK05SJGSqp5evk7Gpg", "version" : { "number" : "6.2.4", "build_hash" : "ccec39f", "build_date" : "2018-04-12T20:37:28.497551Z", "build_snapshot" : false, "lucene_version" : "7.2.1", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
head插件能夠很方便的操做es,head插件與es的關係就像navicat與MySQL數據庫的關係,不過head插件的界面是經過訪問網址瀏覽的。node
npm install -g grunt -cli
。npm install
http.cors.enabled: true http.cors.allow-origin: "*" 將cluster.name: my-application的註釋取消
grunt server
,以下圖就啓動成功。.png&originHeight=114&originWidth=472&size=5531&status=done&width=472)git
localhost:9100
看到以下畫面就安裝成功.png&originHeight=349&originWidth=990&size=28420&status=done&width=990)
github
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency>
spring.data.elasticsearch.cluster-name=my-application spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
@Data @Document(indexName = "person") @AllArgsConstructor @NoArgsConstructor public class Person implements Serializable { @Id private String skuId; private String name; private String address; private Integer age; private String sex; private String city; }
@Data @AllArgsConstructor @NoArgsConstructor public class Response { private Integer code; private String message; private Object data; public static Response successMsg(){ Response response=new Response(); response.setCode(200); response.setMessage("請求成功"); return response; } public static Response failed404(){ Response response=new Response(); response.setCode(404); response.setMessage("請求失敗"); return response; } }
自定義接口實現ElasticsearchRepository,相似於與數據庫交互的dao層,提供了對es的基本操做。spring
public interface PersonRepository extends ElasticsearchRepository<Person,String> { } @NoRepositoryBean public interface ElasticsearchRepository<T, ID extends Serializable> extends ElasticsearchCrudRepository<T, ID> { <S extends T> S index(S var1); Iterable<T> search(QueryBuilder var1); Page<T> search(QueryBuilder var1, Pageable var2); Page<T> search(SearchQuery var1); Page<T> searchSimilar(T var1, String[] var2, Pageable var3); void refresh(); Class<T> getEntityClass(); }
public interface PersonService { long count(); Person save(Person person); void delete(Person person); Iterable<Person> getAll(); List<Person> getByName(String name); Page<Person> pageQuery(Integer pageNo, Integer pageSize, String kw); }
@Service public class PersonServiceImpl implements PersonService { @Autowired private PersonRepository personRepository; @Override public long count() { return personRepository.count(); } @Override public Person save(Person person) { return personRepository.save(person); } @Override public void delete(Person person) { personRepository.delete(person); } @Override public Iterable<Person> getAll() { return personRepository.findAll(); } @Override public List<Person> getByName(String name) { List<Person> personList=new ArrayList<>(); MatchQueryBuilder queryBuilder=new MatchQueryBuilder("name",name); Iterable<Person> personIterable=personRepository.search(queryBuilder); personIterable.forEach(personList::add); return personList; } @Override public Page<Person> pageQuery(Integer pageNo, Integer pageSize, String kw) { SearchQuery searchQuery=new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchPhraseQuery("name",kw)).withPageable(PageRequest.of(pageNo,pageSize)).build(); return personRepository.search(searchQuery); } }
Springboot提供了ElasticsearchTemplate,也可實現的ES的數據操做。數據庫
@RunWith(SpringRunner.class) @SpringBootTest public class SpringEsApplicationTests { @Autowired public PersonService personService; @Autowired ElasticsearchTemplate elasticsearchTemplate; @Test public void contextLoads() { Person person=new Person("123456","zlc","西湖區",18,"男","hangzhou"); personService.save(person); Person person1=new Person("98712","張三","餘杭區",18,"男","hangzhou"); IndexQuery indexQuery=new IndexQueryBuilder().withObject(person1).build(); elasticsearchTemplate.index(indexQuery); } }
@RestController @RequestMapping("/es") public class EsController { @Autowired PersonService personService; /** * 向es添加數據 */ @RequestMapping("/insert") public Object insert(@RequestBody Person person){ JSONObject object=null; try { Person savePerson= personService.save(person); object= (JSONObject) JSON.toJSON(savePerson); } catch (Exception e) { e.printStackTrace(); } return object; } /** * 從es刪除數據 * @param person * @return */ @RequestMapping("/delete") public Object delete(@RequestBody Person person){ try { personService.delete(person); } catch (Exception e) { e.printStackTrace(); return Response.failed404(); } return Response.successMsg(); } /** * 查詢操做 * @param pageNo * @param pageSize * @param key * @return */ @RequestMapping("/query") public Object query(@RequestParam(value = "pageNo",required = false)Integer pageNo,@RequestParam(value = "pageSize",required = false)Integer pageSize, @RequestParam(value = "key",required = false)String key){ Response response=new Response(); try { Page<Person> personPage= personService.pageQuery(pageNo,pageSize,key); response.setData(personPage); } catch (Exception e) { e.printStackTrace(); return Response.failed404(); } return response; } }
經過Postman測試查詢結果以下:.png&originHeight=858&originWidth=1098&size=38028&status=done&width=1098)
npm
failed to load elasticsearch nodes : org.elasticsearch.client.transport.NoNodeAvailableException: None of the configured nodes are available:
初步斷定,應該是spring-boot-starter-data-elasticsearch與Elasticsearch 7.x版本不兼容形成的。
經過測試發現,將Elasticsearch降級到6.x版本,便可解決。
2.修改elasticsearch.yml後雙擊elasticsearch.bat閃退
緣由是elasticsearch.yml默認是utf-8編碼,因此添加的屬性保存時也得是utf-8編碼的。json
https://github.com/liankaizha...跨域
參考文獻:瀏覽器