elasticsearch 진급-elasticsearch 집단 구축 및javaapi와spring 통합 elasticsearch

역렬 색인: 속성 값에 따라 색인을 찾습니다(Docid; TF) id는 색인입니다. TF는 몇 번 나타나서 단어를 통해 색인을 찾습니다. 그리고 이것에 따라 얻은 색인에서 구체적인 위치를 찾습니다. 정파 색인: 색인에 따라 속성 값을 찾습니다. 전체 텍스트 검색: 관련성: 분석: 단일 단어 검색: 여러 단어 검색: 여러 단어 검색, or 사용 가능,그룹 검색: 이 조건을 포함하지만 다른 조건을 포함하지 않는 bool 평점의 계산 규칙: 권중: 인위적인 설정어 증가 권중은 이 데이터의 득점에 영향을 미친다 -> "boost": 10단어 일치: 단어가 일치해야 할 뿐만 아니라 단어의 순서도 일치해야 한다."slop"은 몇 글자 건너뛰기를 설정할 수 있습니다.
집단: 집단 노드:master 노드, node 설정.마스터 속성은true로 선택될 자격이 있으며 전체 집단의 조작을 제어하는 데 사용된다. 예를 들어 창설하거나 삭제하고 다른 비마스터 노드를 관리하는 데 사용된다.데이터 관련 작업, 예를 들어 문서의crud 클라이언트 노드, 프로필의node를 실행하는 데 사용됩니다.master와 node.date 속성은 모두false로 사용자의 요청에 응답하여 요청을 데이터 노드 부락 노드에 보내고 하나의 노드가 tribe를 설정하면그는 여러 개의 집단을 연결하여 모든 연결된 집단에서 검색과 다른 조작을 수행할 수 있는 특수한 클라이언트입니다. docker는elasticsearch 집단을 구축합니다. 1./디렉터리에 es-cluster/node01,node02 만들기 2.설치 디렉터리의 jvm를 복사합니다.options、 elasticsearch.yml에서 각각 node01,node023.프로필 수정: jvm.옵션은 1g을 128m(실제 상황을 보십시오)elasticsearch로 바꾸어야 합니다.yml 설정:discovery.zen.minimum_master_nodes: 1 http.cors.enabled: true http.cors.allow-origin: ""cluster.name: es-cluster node.name: node01 network.host: 192.168.64.128 http.port: 9300 discovery.zen.ping.unicast.hosts: ["192.168.64.128"] #이 노드가 주 노드 선거에 출마할 자격이 있음을 나타냅니다.master: true node.data: true 4. node01, node02 접근 권한을 설정합니다. docker가 elasticsearch를 시작하는 것은 루트 사용자가 접근하는 것이 아니기 때문입니다. node01과 node02와 elasticsearch를 마운트하면 docker는 node01이나 node02의 데이터 파일에 데이터를 쓸 수 없습니다.chmod 777 data/-R 5.마운트합니다.docker create --name es-node01 --net host -v/es-cluster/node01/elastisearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v/es-cluster/node01/jvm.options:/usr/share/elasticsearch/config/jvm.options -v/es-cluster/node01/data:/usr/share/elasticsearch/data elasticsearch:6.5.4 6.로그를 시작하고 인쇄합니다.docker startes-node01 & docker logs-fes-node01 헤드 페이지의 01234는 조각을 표시하고 굵은 테두리는 주 조각을 표시하며 가는 테두리는 사본을 나타낸다.
노드 다운(고장 전이): date 노드 다운: 그룹 상태가 노란색이면 주 노드가 사용할 수 있고 복사본 노드가 완전히 사용할 수 없음을 나타냅니다.한동안 관찰한 결과 노드 목록에 다운된 노드가 없고 사본 노드는 다운되지 않은 다른 노드에 분배되어 집단 상태가 녹색으로 회복되었다.날짜 노드를 복구한 후, 이 날짜 노드는 다시 집단에 가입하고, 노드 정보를 다시 분배합니다.주 노드가 다운될 때: 집단 충전이 노란색으로 변하고 집단이 마스터에 대해 재선거를 실시하여 새로운 마스터를 선출했다. 한동안 관찰한 결과 노드 목록에 원래 다운된 주 노드가 없고 집단 상태가 녹색으로 회복된 것을 발견했다.다운된 메인 노드가 복구된 후, 이 노드는 그룹에 추가되지 않습니다.이것이 바로 집단 중의 뇌열 문제다.뇌분열 문제: 지휘 마스터가 여러 개로 변했다.해결 방안: 노드를 쉽게 마스터로 만들 수 없습니다. 여러 노드가 인정해야 합니다.minimum_ 설정naster_nodes의 크기는 2(모든 노드의 설정), 공식 추천(N/2)+1, N은 집단의 노드 수입니다.분포식 문서 저장 루트:elasitcsearch에서 어떤 노드에 저장될지 계산하는 방식으로 결정됩니다. 계산 공식은 다음과 같습니다:shard=hash(routing)%number_of_primary_shards routing 값은 임의의 문자열입니다. 기본값은 _id도 사용자 정의할 수 있습니다.이routing 문자열은 해시 함수를 통해 숫자를 생성한 다음 메인 슬라이드의 수량으로 여수 (remainder) 를 얻으면 여수의 범위는 영원히 0에서number_of_primary_shards-1, 이 숫자는 특정 문서가 있는 부분입니다.마스터 슬라이스가 생성된 후 수정할 수 없는 이유입니다.쓰기 작업: 새로 만들기, 인덱스, 삭제는 모두 쓰기 작업이다. 예를 들어 노드 3에 대해 쓰기 작업을 하고 노드 3은 주 노드에게 요청한다. 주 노드에서 성공적으로 완성해야만 관련 복사를 할 수 있다.문서 검색: 문서는 주 분할 또는 복사된 분할에서 읽어들일 수 있습니다.전문 검색: 문서가 각 노드에 분산될 수 있다면 분포식 상황에서 검색은 두 단계로 나뉘어 검색+되찾는다.클라이언트는 검색 요청을 node3에 보내고from+size 길이의 빈 우선 순위 대기열을 만듭니다. node3z는 색인에 검색된 모든 블록의 복사본이나 복사본을 전송합니다. 블록마다 로컬에서 이 검색을 실행하고 결과를 되돌려줍니다. 모든 문서가 되돌아오면 node3는 이 값을 자신의 우선 대기열에 통합하여 클라이언트에게 되돌려줍니다.
자바 클라이언트: Elasticsearch에서 자바에게 2가지 클라이언트를 제공했는데 하나는 REST 스타일의 클라이언트이고 다른 하나는 자바 API의 클라이언트입니다.REST는 고급 클라이언트와 하위 클라이언트로 구분됩니다.(POST/GET 요청을 직접 보내는 방식) 낮은 수준:

			      org.elasticsearch.client
			      elasticsearch-rest-client
			      6.5.4
			 

RESTful api 사용과 거의 일치합니다.고급:

			  org.elasticsearch.client
			  elasticsearch-rest-high-level-client
			  6.5.4
			

Spring Data는 Elasticsearch 작업을 단순화합니다.
            
 		      org.springframework.boot
 		      spring-boot-starter-data-elasticsearch
 		    

속성 편집:
    spring.application.name = itcast-elasticsearch
	spring.data.elasticsearch.cluster-name=es-itcast-cluster
	spring.data.elasticsearch.cluster-
	nodes=172.16.55.185:9300,172.16.55.185:9301,172.16.55.185:9302 
	# 9300 api ,restful 9200,api 9300

사용자 객체 작성:
		@Data
		@AllArgsConstructor
		@NoArgsConstructor
		@Document(indexName = "itcast", type = "user", shards = 6, replicas = 1)
		public class User {
		  @Id
		  private Long id;
		  @Field(store = true)
		  private String name;
		  @Field
		  private Integer age;
		  @Field
		  private String hobby;
		}

		 :
			  @Test

			  public void testSave(){
			    User user = new User();
			    user.setId(1001L);
			    user.setAge(20);
			    user.setName(" ");
			    user.setHobby(" 、 、 ");
			    IndexQuery indexQuery = new IndexQueryBuilder().withObject(user).build();
			    String index = this.elasticsearchTemplate.index(indexQuery);
			    System.out.println(index);
			 }
		 :
			 @Test
			  public void testBulk() {
			    List list = new ArrayList();
			    for (int i = 0; i < 5000; i++) {
			      User user = new User();
			      user.setId(1001L + i);
			      user.setAge(i % 50 + 10);
			      user.setName(" " + i);
			      user.setHobby(" 、 、 ");
			      IndexQuery indexQuery = new
				  IndexQueryBuilder().withObject(user).build();
			      list.add(indexQuery);
			   }
			    Long start = System.currentTimeMillis();
			    this.elasticsearchTemplate.bulkIndex(list);
			    System.out.println(" :" + (System.currentTimeMillis() - start)); 
			 }
		 :
		/**
		  *  , index 
		  */
		  @Test
		  public void testUpdate() {
		    IndexRequest indexRequest = new IndexRequest();
		    indexRequest.source("age", "30");
		    UpdateQuery updateQuery = new UpdateQueryBuilder()
		       .withId("1001")
		       .withClass(User.class)
		       .withIndexRequest(indexRequest).build();
		    this.elasticsearchTemplate.update(updateQuery);
		 }
		 
		@Test
		public void testDelete(){
		  this.elasticsearchTemplate.delete(User.class, "1001");
		}
		 
		@Test
		public void testSearch(){
		  PageRequest pageRequest = PageRequest.of(1,10); // 
		  SearchQuery searchQuery = new NativeSearchQueryBuilder()
		     .withQuery(QueryBuilders.matchQuery("name", " ")) // match 
		     .withPageable(pageRequest)
		     .build();
		  AggregatedPage users =
		this.elasticsearchTemplate.queryForPage(searchQuery, User.class);
		  System.out.println(" :" + users.getTotalPages()); // 
		  for (User user : users.getContent()) { //  
		    System.out.println(user);
		 }
		}

좋은 웹페이지 즐겨찾기