신축성 검색(elasticsearch) 최신 입문 공략
15395 단어 모바일 애플리케이션 JAVA 백그라운드 개발
elassticsearch
신축성 검색(elasticsearch) 최신 입문 공략 신축성 검색(elasticsearch) 진급 – 서비스 유지보수
뭐 공부 해요?
elasticsearch는 전용 사이트 내 전문 검색 엔진으로 오픈된 루틴을 바탕으로 이루어지고 그 자체도 오픈된 제품으로 수정과 재발포를 허용한다.
elasticsearch는 루틴을 색인과 검색의 핵심으로 하고restfulapi를 제공하여 서비스 관리와 데이터 검색을 진행하며 배치와 사용이 매우 편리하다.
더 좋은 것은elasticsearch 원생의 지원 집단화와 분포식은 현재 DT의 흐름에 잘 적응하고 높은 가용과 확장을 할 수 있다는 것이다.
언제
데이터베이스는 색인과 검색을 잘 지원할 수 있다. 일반적으로 회사가 막 시작하기 시작하면 올라올 필요가 없어es를 검색 서비스로 만들 수 있다.
만약에 제품의 기초 서비스가 이미 구축되었고 더욱 좋은 사용자 체험 방면으로 발전해야 한다면 이때es와 같은 전문 검색 엔진을 사용할 수 있다.
es는 데이터베이스 테이블 조회 기능을 지원하지 않기 때문에es는 검색의 보조이고 원시 데이터는 데이터베이스에 저장되어야 한다.동기화, 관련 인터페이스에서 es 인덱스를 업데이트하거나, 아리카나 같은 데이터베이스 binlog 동기화 도구를 사용합니다.
es의 검색 방식은baidu, 360, 신마 등 검색엔진의 검색 방식과 같다. 검색하는 과정에서 먼저 검색 단어를 구분하고 모든 단어는 일치 조건으로 한다. 최종적으로 모든 단어의 일치도는 모든 명중항의 일치도 점수, 즉 관련도를 더한다.
es가 되돌아오는 결과는 관련도가 큰 순서에서 작은 순서에 따른다.
자, 다음은 입문es의 전체 절차를 살펴보겠습니다. 만약에es의 고급 기능에 대해 더 알고 싶으면 마지막으로 추천합니다. 특히 그 중의 을 보십시오.
설치 배포
es는 세 가지 설치 방식이 있다. 1.공식 버전으로 설치합니다. 이런 방식으로 설치하려면 관련 플러그인을 설치해야 합니다.2. rtf 버전을 사용하여 설치합니다. 이런 방식은 필요한 중국어 분사와 색인 플러그인을 추가했습니다.3. Docker 렌즈 설치를 사용하는데 이런 방식으로 직접 설치하는 것은es를 포함하는 가상 기기이다.
rtf 버전 설치 사용
github에서 rtf 버전의 es를 다운로드하고 주소를 다운로드합니다.https://github.com/medcl/elasticsearch-rtf
2.2.0 버전의 rtf를 사용하고 다운로드한 후 압축 패키지를/usr/local에 넣고 다음 명령을 실행합니다.
unzip elasticsearch-rtf-2.2.0.zip
cd에서 conf 디렉토리로 이동하여 다음 두 항목을 수정합니다.
cluster.name: 당신의 프로젝트 이름network.host: LAN 카드 주소
첫 번째 항목을 수정한 것은es는 방송의 방식으로 국역 네트워크 내의 다른 es를 찾고 집단 이름이 같으면 자동으로 집단에 가입하기 때문이다.수정하지 않으면 그룹명은 기본적으로elasticsearch로 다른 사람이 배치한es나 자신이 테스트한es에 의해 방해되기 쉬워 예측할 수 없는 문제를 일으킬 수 있습니다.
두 번째 항목을 수정하는 것은es가 기본적으로 연결된 IP는 127.0.1이기 때문에 수정하지 않으면 다른 기계가 이es 노드에 접근할 수 없기 때문이다.
수정하면 다음 명령을 실행하여 es를 시작합니다.
./elasticsearch -d
-d 명령은 es를 백엔드 프로그램으로 지정하여 실행합니다. -d를 추가하지 않으면 원격 ssh가 서버에 연결되고es를 시작한 후에 이번 시즌 명령행 창을 닫으면es도 자동으로 닫힙니다.
자, 시동을 걸 수밖에 없어요. 우리 에스에게 인사합시다.es가 restful 인터페이스를 제공했기 때문에 여기서curl로 요청하여es가 설치되었는지 확인하십시오.명령줄에 명령을 입력합니다.
curl -XGET http://ip:9200/
설치가 올바르면 다음과 같은 피드백을 얻을 수 있습니다.
{
"name" : "Margali Szardos",
"cluster_name" : "nggirl-es",
"version" : {
"number" : "2.2.0",
"build_hash" : "8ff36d139e16f8720f2947ef62c8167a888992fe",
"build_timestamp" : "2016-01-27T13:32:39Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}
인덱스 데이터 입력
다음 명령을 사용하여 색인을 만들 수 있습니다
curl -XPUT http://ip:9200/myIndex -d ‘{“settings” :{“number_of_shards” :3,”number_of_replicas” : 1}}’
이 인덱스의 이름은 my Index로 모두 3개의 조각이 있고 조각마다 사본이 있습니다.
다음 명령을 실행하여 상기 인덱스에 데이터를 삽입합니다
curl -XPUT http://ip:9200/myIndex/employee/1 -d ‘{“first_name” : “John”,”last_name” : “Smith”,”age” : 25,”about” : “I love to go rock climbing”, “interests”:[ “sports”, “music” ]}
위의 명령은 myIndex 인덱스의 employee 유형에 삽입됨_id가 1인 직원 데이터입니다.
색인을 만들지 않은 상태에서 데이터를 삽입하는 작업을 직접 수행할 수도 있습니다. 그러면 색인 설정은 기본 설정인 5개의 조각, 조각당 1개의 복사본을 사용합니다.
상술한 데이터를 얻으려면 다음과 같은 명령을 실행할 수 있다
curl -XGET http://ip:9200/myIndex/employee/1
또는 더 복잡한 조회로 추천독서를 참조할 수 있습니다.
spring+elasticsearch 통합
프로필 추가
스프링-mvc의 웹 프로젝트를 만드는 방법을 알고 있습니다.다음 내용은 모두spring-mvc 공사에 추가됩니다.여기에 사용된spring 버전은 4.2.6,pring-data-elasticsearch 2.0.0입니다.RELEASE,elasticsearch2.2.0, 따라서elasticsearch-rtf는 2.2.0을 사용해야 합니다. 그렇지 않으면 연결이 실패합니다.
spring-elasticsearch를 추가합니다.xml 파일, 내용은 다음과 같습니다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/data/elasticsearch
http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd">
<elasticsearch:repositories base-package="com.pumpkin.carriage.repository.elasticsearch" />
<elasticsearch:transport-client id="client" cluster-nodes="${application.parameter.elasticsearch.cluster.nodes}" cluster-name="nggirl-es"/>
<bean name="elasticsearchTemplate"
class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">
<constructor-arg name="client" ref="client" />
bean>
beans>
elasticsearch:repositories는repository 인터페이스 파일의 패키지 디렉터리로 실례화된 repository 인터페이스를 자동으로 스캔하는 데 사용됩니다.
client는 그룹 bean의 대상이고cluster-nodes는 그룹 중의 노드 IP 목록이며 포트 번호는 9300입니다.클라이언트는 집단 노드로 연결되기 때문에restful 인터페이스가 아닙니다.
elasticsearchTemplate는 es의 템플릿 bean으로 실례화된 Repository에 자동으로 주입됩니다.
노드-client와transport-client를 말해 보세요.node-client는 데이터를 저장하는 노드이지만 데이터 획득에 참여하지 않습니다.transport-client는 데이터를 저장하지 않는 노드로 삭제 검사만 지원합니다.
node-client의local가true로 설정되었을 때tomcat과 같은 jvm에서 로컬es서비스를 만들고tomcat와 함께 시작합니다.
도메인 모델 추가
자신의 비즈니스 모델을 정의합니다. 여기서 흔히 볼 수 있는 사용자를 예로 들 수 있습니다.
package com.pumpkin.carriage.model.elasticsearch;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
@Document(indexName= "myIndex", type= "user", shards = 1, replicas = 0, refreshInterval = "-1")
public class ESUser {
@Id
private String userId;
@Field(type = FieldType.String)
private String profile;
@Field(type = FieldType.String)
private String nickName;
@Field(type = FieldType.String)
private String userRole;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getProfile() {
return profile;
}
public void setProfile(String profile) {
this.profile = profile;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getUserRole() {
return userRole;
}
public void setUserRole(String userRole) {
this.userRole = userRole;
}
}
@Id 필드가 있어야 합니다. 이 필드는 자동으로 es의 객체로 설정됩니다_id, 즉 GET 명령의 id 가져오기 방식으로 얻을 수 있습니다.
curl -XGET http://ip:9200/myIndex/user/_id
방식으로 데이터 대상을 얻다.
액세스 인터페이스 추가(repository)
package com.pumpkin.carriage.repository.elasticsearch;
import java.util.List;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchCrudRepository;
import com.pumpkin.carriage.model.elasticsearch.ESUser;
public interface UserRepositry extends ElasticsearchCrudRepository<ESUser, String>{
List findByNickName(String nickName,Pageable pageable);
List findByNickNameLike(String nickName,Pageable pageable);
}
findBy NickName 방법의 역할은 사용자 이름이 nickName인 사용자 목록을 가져오는 것입니다. Pageabel은 페이지 수와 페이지 크기를 포함하는 PageRequest 대상을 전송할 수 있습니다.
findBy NickNameLike 방법의 역할은 사용자 이름이 nickName과 모호한 사용자 목록을 가져오는 것입니다.
여기를 이해하려면 추천 읽기 중인spring-data-jpa 관련 문서를 보십시오.
자, 이렇게 하면 당신의 리포지토리를 모든 서비스에 등록할 수 있습니다. 설정과 사용 방식은 mybatis와 똑같습니다.
웹 관리 플러그인 사용
es 집단의 상태를 보려면 명령으로 볼 수 있습니다
curl -XGET http://ip:9200/_cluster/health
다음과 같은 결과가 반환됩니다.
{
"cluster_name":"nggirl-es",
"status":"green",
"timed_out":false,
"number_of_nodes":1,
"number_of_data_nodes":1,
"active_primary_shards":2,
"active_shards":2,
"relocating_shards":0,
"initializing_shards":0,
"unassigned_shards":0,
"delayed_unassigned_shards":0,
"number_of_pending_tasks":0,
"number_of_in_flight_fetch":0,
"task_max_waiting_in_queue_millis":0,
"active_shards_percent_as_number":100.0
}
이것은 편리하지도 않고 전면적이지도 않다. es는 두 개의 플러그인이 있어 집단 정보 조회와 집단 관리를 할 수 있다. 하나는 공식적인 마블이고 이것은 유료이며 하나는 헤드이고 이것은 무료이다.다음은 헤드의 설치에 대해 이야기합시다.
먼저 cd에서 elasticsearch/bin 디렉터리로 다음 명령을 실행합니다.
./plugin -install mobz/elasticsearch-head
완료되면 es를 다시 시작하고 브라우저에서 액세스합니다.http://ip:9200/_plugin/head/됐어.
여기에 es 안전 보호와 후기 유지 보수에 관한 문제가 부족하여 후속적으로 다시 증가할 기회가 있다.