클라이언트의 CAT 객체의 메소드는 현재 실행중인 인스턴스에 대한 다른 정보를 제공합니다. 지수 메소드에는 모든 인덱스, 건강, 문서 수 및 디스크 크기가 나와 있습니다. V 옵션은 CAT 메소드의 응답에 제목을 추가합니다. 위의 코드 스 니펫을 실행하면 클러스터의 건강을 나타내는 색상 코드를 출력합니다. 빨간색은 클러스터에 문제가 있고 실행되지 않았 음을 나타냅니다. 노란색은 클러스터가 실행 중임을 나타내지 만 경고가 있고 녹색은 모든 것이 괜찮다는 것을 나타냅니다. (설정에 따라) 로컬 컴퓨터에서 실행할 때 노란색 상태가 발생합니다. 기본 설정에는 클러스터의 5 개의 노드가 포함되어 있지만 로컬 컴퓨터에서 1 개의 인스턴스 만 실행되기 때문입니다. 이 튜토리얼의 목적으로 항상 생산에서 녹색 상태를 위해 노력해야하지만 노란색 상태에서 Elasticsearch를 계속 사용할 수 있습니다.
<code>java -version</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
동적 및 사용자 정의 매핑
앞에서 언급했듯이 Elasticsearch는 패턴이 없습니다. 즉, 데이터를 가져 오기 전에 데이터 구조를 정의 할 필요는 없지만 (SQL 데이터베이스에서 테이블을 정의하는 것과 유사) Elasticsearch는 자동으로이를 감지합니다. 그러나 Schemaless라고 불립니다. 데이터 구조에는 몇 가지 제한이 있습니다.
예를 들어, { "key1": 12}이 색인화되면 Elasticsearch는 Key1을 자동으로 맵핑합니다. 이제 { "key1": "value1", "key2": "value2"}를 색인하려고하면 필드 key1의 유형이 길어지기 때문에 오류가 발생합니다. 한편, 객체 { "key1": 13, "key2": "value2"}는 문제없이 인덱싱되고 유형 문자열의 key2가 맵에 추가됩니다.
맵은이 기사의 범위를 벗어나고 대부분의 경우 자동 매핑이 잘 작동합니다. Mapping에 대한 심층적 인 토론을 제공하는 Elasticsearch 문서를 확인하는 것이 좋습니다.
검색 엔진을 빌드
데이터가 색인화되면 검색 엔진을 구현할 수 있습니다. Elasticsearch는 라는 직관적 인 전체 텍스트 검색 쿼리 구조를 제공합니다. 사용 가능한 여러 유형의 검색 쿼리가 있지만이 기사에서는 몇 가지 일반적인 쿼리를 살펴볼 것입니다. 쿼리 DSL에 대한 전체 문서는 여기에서 찾을 수 있습니다.
여기에 표시된 각 예제에 대한 코드 링크를 제공했습니다. 환경이 설정되고 테스트 데이터가 색인화되면 저장소를 복제하고 컴퓨터에서 예제를 실행할 수 있습니다. 이렇게하려면 명령 줄에서 node filename.js를 실행하십시오.
모든 문서를 하나 이상의 인덱스로 반환
검색을 수행하기 위해 클라이언트가 제공 한 다양한 검색 방법을 사용합니다. 가장 쉬운 쿼리는 match_all이며 모든 문서를 하나 이상의 인덱스로 반환합니다. 다음 예는 인덱스에 저장된 문서를 모두 얻는 방법을 보여줍니다 (소스 코드 링크). <code>java -version</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
기본 검색 쿼리는 쿼리 객체에 포함되어 있습니다. 나중에 볼 수 있듯이이 개체에 다른 유형의 검색 쿼리를 추가 할 수 있습니다. 각 쿼리에 대해 검색 옵션이 포함 된 개체 값과 함께 쿼리 유형 (이 예제의 match_all)이 포함 된 키를 추가합니다. 이 예제에는 색인의 모든 문서를 반환하려고하기 때문에 옵션이 없습니다.
쿼리 객체 외에도 검색 본문에는 크기 및 출신을 포함한 다른 선택적 특성이 포함될 수도 있습니다. 크기 속성은 응답에 포함될 문서 수를 결정합니다. 이 값이 존재하지 않으면 기본적으로 10 개의 문서가 반환됩니다. From Property는 반환 된 문서의 시작 색인을 결정합니다. 이것은 페이지 매김에 유용합니다.
검색 API 응답을 이해하십시오
검색 API의 응답을 기록하는 경우 (위의 예에서 결과) 많은 정보가 포함되어 있기 때문에 처음에는 복잡해 보일 수 있습니다.
최고 수준에서 응답에는 결과를 찾는 데 걸리는 밀리 초의 수를 나타내는 테이크 속성이 포함되어 있습니다. timed_out은 결과를 최대 허용 시간 내에 찾을 수없는 경우에만 사용됩니다. 상태에 대한 관련 노드 (노드 클러스터로 배포 된 경우) 및 검색 결과가 포함 된 HITS에 대한 관련 노드 정보를 제공합니다.
hits 속성에는 다음 속성이있는 객체가 있습니다.
총 - 총 - 총 일치 수 를 표시합니다
max_score - 를 찾은 항목의 가장 높은 점수입니다
HITS- 발견 된 항목이 포함 된 배열. Hits 배열의 각 문서에는 인덱스, 유형, 문서 ID, 점수 및 문서 자체 (_Source 요소)가 있습니다.
매우 복잡하지만 좋은 소식은 결과를 추출하는 방법을 구현하면 검색 쿼리에 관계없이 항상 동일한 형식으로 결과를 얻을 수 있다는 것입니다.
또한 Elasticsearch의 장점 중 하나는 각 일치하는 문서에 점수를 자동으로 할당한다는 것입니다. 이 점수는 문서의 관련성을 정량화하는 데 사용되며 기본적으로 결과는 점수 감소 순서대로 반환됩니다. Match_all을 사용하여 모든 문서를 검색하는 경우 점수는 의미가 없으며 모든 점수는 1.0으로 계산됩니다. <code>npm install elasticsearch --save</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
매치 필드에 특정 값이있는 문서
이제 더 흥미로운 예를 살펴 보겠습니다. 현장에 특정 값이 포함 된 문서와 일치하려면 매치 쿼리를 사용할 수 있습니다. 아래는 일치 쿼리 (소스 코드 링크)가있는 간단한 검색 본문입니다.
앞에서 언급했듯이 먼저 검색 유형이 포함 된 쿼리 객체에 항목을 추가합니다.이 예제에서 일치합니다. 검색 유형 객체 내에서 검색 할 문서 필드를 식별합니다. 여기에 제목이 있습니다. 그것에는 쿼리 속성을 포함하여 검색과 관련된 데이터를 넣습니다. 위의 예를 테스트 한 후 검색 속도에 놀기 시작하기를 바랍니다.
위의 검색 쿼리는 제목 필드가 쿼리 속성의 단어와 일치하는 문서를 반환합니다. 아래 그림과 같이 최소 일치 수를 설정할 수 있습니다.
<code>java -version</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
이 쿼리는 제목에 3 개 이상의 지정된 단어와 문서와 일치합니다. 쿼리에 3 개의 단어 미만이 있으면 모든 단어가 제목에 표시되어 문서와 일치해야합니다. 검색 쿼리에 추가 된 또 다른 유용한 기능은 모호성입니다. 퍼지 매치는 유사한 철자가있는 용어를 찾을 수 있으므로 사용자가 쿼리를 작성하는 동안 오류를 입력하는 경우 유용합니다. 문자열의 경우 모호성 값은 각 항에 허용되는 최대 레빈 슈타인 거리를 기준으로합니다. 모호성이있는 예입니다.
<code>npm install elasticsearch --save</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
여러 필드에서 검색
여러 필드에서 검색하려면 Multi_Match를 사용하여 유형을 검색 할 수 있습니다. 검색 쿼리 객체에서 필드를 키로 사용하는 대신 검색 할 필드 배열 인 필드 키를 추가한다는 점을 제외하고는 일치하는 것과 비슷합니다. 여기에서 제목, orugors.firstname 및 Authors.lastName 필드를 검색합니다. (소스 코드 링크)
multi_match query는 Minimum_Should_Match 및 Fuzziness와 같은 다른 검색 속성을 지원합니다. Elasticsearch는 와일드 카드 (예 : *와 같은)를 여러 필드와 일치시켜 위의 예를 [ 'title', 'authors. *name'으로 단축 할 수 있습니다.
완전한 문구 와 일치합니다
<code>const elasticsearch = require('elasticsearch');</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
여러 쿼리 결합
지금까지, 예에서, 우리는 요청 당 하나의 쿼리 만 사용했습니다. 그러나 Elasticsearch를 사용하면 여러 쿼리를 결합 할 수 있습니다. 가장 일반적인 복합 쿼리는 bool입니다. bool 쿼리는 네 가지 유형의 키를 허용합니다 : 필수,해야 할 일, Must_not 및 필터. 이름에서 알 수 있듯이 결과의 문서는 쿼리와 일치해야합니다. 는 쿼리의 쿼리와 일치 할 수 없습니다. 쿼리와 일치하면 더 높은 점수를 얻게됩니다. 위의 각 요소는 쿼리 배열 형태로 여러 쿼리를 수신 할 수 있습니다.
아래에서는 새 쿼리 유형 query_string과 함께 bool 쿼리를 사용합니다. 이를 통해 및 등의 키워드를 사용하여 더 고급 쿼리를 작성할 수 있습니다. query_string 구문의 전체 문서는 여기에서 찾을 수 있습니다. 또한, 당사는 스코프 쿼리 (여기에 문서화)를 사용하여 필드를 주어진 범위로 제한 할 수 있습니다. (소스 코드 링크)
위의 예에서, 쿼리는 term1
또는 를 포함하는 저자의 이름을 반환합니다. 그들의성에는 term2,
및 에 제목이 포함되어 있으며 2011 년에는 없었습니다. , 2012 또는 2013 년에 게시 된 문서. 또한, 본문에 주어진 문구가 포함 된 문서는 더 높은 점수를 얻고 결과의 맨 위에 표시됩니다 (매치 쿼리가 DOUR 조항에 있기 때문에). <code>const esClient = new elasticsearch.Client({
host: '127.0.0.1:9200',
log: 'error'
});</code>
로그인 후 복사
로그인 후 복사
필터, 집계 및 권장 사항
고급 검색 기능 외에도 Elasticsearch는 추가 기능을 제공합니다. 여기서는 세 가지 일반적인 기능을 살펴 봅니다.
필터
일반적으로 특정 기준에 따라 검색 결과를 개선 할 수 있습니다. Elasticsearch는 필터를 통해이 기능을 제공합니다. 우리의 기사 데이터에서, 당신의 검색에서 5 년 만에 게시 된 기사 만 선택하려는 여러 기사를 반환한다고 가정 해 봅시다. 검색 순서를 변경하지 않고 검색 결과에서 기준과 일치하지 않는 모든 것을 필터링 할 수 있습니다.
BOOL 쿼리의 필수 절에서 필터와 동일한 쿼리의 차이점은 필터가 검색 점수에 영향을 미치지 않으며 필수 쿼리가 영향을 미친다는 것입니다. 검색 결과가 반환되고 특정 기준에 따라 사용자가 필터링되면 원래 결과 순서를 변경하고 싶지 않고 결과에서 관련없는 문서를 삭제하려고합니다. 필터는 검색과 동일한 형식을 따르지만보다 일반적으로 텍스트 문자열이 아닌 명확한 값을 가진 필드에 정의됩니다. Elasticsearch는 BOOL 복합 검색 쿼리의 필터 절을 통해 필터를 추가 할 것을 권장합니다.
위의 예를 계속하십시오. 검색 결과를 2011 년부터 2015 년까지 출판 된 기사로 제한한다고 가정하십시오. 이렇게하려면 원래 검색 쿼리의 필터 부분에 범위 쿼리를 추가하면됩니다. 결과에서 일치하지 않는 문서가 제거됩니다. 다음은 필터링 쿼리의 예입니다. (소스 코드 링크)
중합
집계 프레임 워크는 검색 쿼리를 기반으로 다양한 집계 데이터 및 통계를 제공합니다. 두 가지 주요 집계 유형은 메트릭 및 그룹화이며, 메트릭 집계는 문서 세트에서 메트릭을 추적하고 계산하는 반면, 그룹화 된 집계는 각각 키 및 문서 조건과 관련된 버킷을 구축합니다. 메트릭 집계의 예로는 평균, 최소, 최대, 합계 및 값 수가 포함됩니다. 그룹화 된 집계의 예에는 범위, 날짜 범위, 히스토그램 및 용어가 포함됩니다. 어 그리 게이터에 대한 심층적 인 설명은 여기에서 찾을 수 있습니다.
집계는 집계 객체 내부에 배치되며,이 자체는 검색 객체의 본문에 직접 배치됩니다. Aggregates 객체에서 각 키는 사용자가 Aggregator에 할당 한 이름입니다. 어 그리 게이터 유형과 옵션은 해당 키의 값으로 배치해야합니다. 다음으로, 우리는 메트릭 애그리 게이터와 버킷 애그리 게이터의 두 개의 다른 어 그리 게이터를 살펴 봅니다. 메트릭 어 그리 게이터로서 우리는 데이터 세트에서 최소 연도 값 (가장 오래된 게시물)을 찾으려고 노력하고 버킷 애그리 게이터의 경우 각 키워드의 발생 수를 찾으려고합니다. (소스 코드 링크)
위의 예에서, 우리는 메트릭 어 그리 게이터 Min_year (이 이름은 이름 일 수 있음)의 이름을 지정합니다. 버킷 애그리 게이터는 키워드로 명명되었으며 키워드 필드에서 수행되는 용어 유형의 집계입니다. 골재의 결과는 응답의 응집 요소에 포함되며, 더 깊은 수준에서는 각 정의 된 어 그리 게이터 (Min_year 및 키워드)와 그 결과를 포함합니다. 다음은이 예에 대한 부분 응답입니다. <code>java -version</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
기본적으로 응답으로 최대 10 개의 버킷이 반환됩니다. 요청에서 필드 옆에 크기 키를 추가하여 반환 된 최대 버킷 수를 결정할 수 있습니다. 모든 버킷을 받으려면이 값을 0으로 설정하십시오.
제안
다른 모든 클라이언트 방법과 일치하는 요청 본문에 검색 인덱스를 결정하는 인덱스 필드가 있습니다. 신체 속성에서 우리는 제안을 찾고있는 텍스트를 추가하고 (집계 객체와 마찬가지로) 각 Suggester (이 경우 Titlesuggester)에 이름을 할당합니다. 그 가치는 제안자의 유형과 옵션을 결정합니다. 이 경우 제목 필드에 대해 용어 제안을 사용하고 태그 당 최대 제안 수를 5 개 (크기 : 5)로 제한합니다.
제안 API의 응답에는 요청한 각 제안자에 대한 키가 포함되어 있으며, 이는 텍스트 필드의 용어 수와 동일한 크기의 배열입니다. 이 배열의 각 객체마다 텍스트 필드에 제안이 포함 된 옵션 객체가 있습니다. 다음은 위의 요청에 대한 부분적인 응답입니다. <code>java -version</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
문구 제안을 얻으려면 위와 동일한 형식을 따라갈 수 있습니다. 제안자 유형을 문구로 바꾸십시오. 다음 예에서 응답은 위에서 설명한 것과 동일한 형식을 따릅니다. (소스 코드 링크)
추가 읽기
<code>npm install elasticsearch --save</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
로그인 후 복사
여기에 제공된 예제를주의 깊게 읽은 후 문서를 확인하는 것이 좋습니다. 그들은 두 가지 주요 출처를 제공합니다. 하나는 Elasticsearch와 그 기능에 대한 참조이며, 다른 하나는 구현, 사용 사례 및 모범 사례에 더 중점을 둔 가이드입니다. Node.js 클라이언트에 대한 자세한 설명서를 여기에서 찾을 수도 있습니다.
이미 Elasticsearch를 사용하고 있습니까? 당신의 경험은 무엇입니까? 아니면 이것을 읽은 후 시도해 볼 계획입니까? 아래 의견에 알려주십시오. <code>const elasticsearch = require('elasticsearch');</code>
로그인 후 복사
로그인 후 복사
로그인 후 복사
검색 엔진 노드 Elasticsearch 에 대한 FAQS (FAQ)
Elasticsearch와 다른 검색 엔진 (예 : Elasticlunr 또는 Minisearch)의 차이점은 무엇입니까? elasticsearch는 강력하고 배포 된 오픈 소스 검색 및 분석 엔진입니다. 많은 양의 데이터를 처리하고 실시간 검색 결과를 제공하도록 설계되었습니다. 반면, ElasticLunr 및 Minisearch는 JavaScript 용 가벼운 클라이언트 검색 라이브러리입니다. 그들은 더 작은 데이터 세트를 위해 설계되었으며 종종 브라우저 기반 애플리케이션에서 사용됩니다. Elasticsearch는 분산 검색, 데이터 분석 및 기계 학습 기능과 같은 고급 기능을 제공하지만 ElasticLunr 및 Minisearch는 기본 검색 기능에 사용하기가 더 쉽습니다.
node.js 응용 프로그램에서 Elasticsearch를 구현하는 방법은 무엇입니까?
node.js 응용 프로그램에서 Elasticsearch 구현에는 여러 단계가 포함됩니다. 먼저 NPM을 사용하여 Elasticsearch 패키지를 설치해야합니다. 그런 다음 Elasticsearch 클라이언트 인스턴스를 생성하고 Elasticsearch 서버에 연결해야합니다. 그런 다음 클라이언트의 방법을 사용하여 문서 인덱싱, 데이터 검색 및 Elasticsearch 클러스터 관리와 같은 다양한 작업을 수행 할 수 있습니다.
Elasticsearch를 사용하여 브라우저에서 검색 엔진을 빌드 할 수 있습니까?
elasticsearch는 주로 서버 측 응용 프로그램을 위해 설계되었지만 Node.js 서버를 사용하여 브라우저 기반 응용 프로그램에서 사용할 수 있습니다. 서버는 브라우저와 Elasticsearch 서버 간의 프록시 역할을하여 모든 검색 요청 및 응답을 처리 할 수 있습니다. 그러나 더 간단한 사용 사례의 경우 ElasticLunr 또는 Minisearch와 같은 클라이언트 검색 라이브러리가 더 나은 선택 일 수 있습니다.
Elasticsearch는 다른 NPM 검색 패키지와 어떻게 비교됩니까?
elasticsearch는 강력한 기능과 확장 성 덕분에 NPM에서 가장 인기있는 검색 패키지 중 하나입니다. 데이터를 인덱싱, 검색 및 분석하기위한 포괄적 인 API 세트를 제공합니다. 그러나 다른 NPM 검색 패키지보다 더 복잡하고 리소스 집약적입니다. 소규모 프로젝트를 수행하거나 간단한 검색 기능이 필요한 경우 Search-Index 또는 JS 검색과 같은 다른 NPM 패키지가 더 적합 할 수 있습니다.
JavaScript를 사용하여 간단한 브라우저 내 검색 엔진을 구축하는 방법은 무엇입니까?
JavaScript를 사용하여 간단한 브라우저 내 검색 엔진을 구축에는 데이터 색인 생성, 검색 기능 구현 및 검색 결과 표시가 포함됩니다. ElasticLunr 또는 Minisearch와 같은 JavaScript 검색 라이브러리를 사용 하여이 프로세스를 단순화 할 수 있습니다. 이 라이브러리는 사용하기 쉬운 API를 색인 및 검색 데이터에 제공하며 서버 요구 사항없이 브라우저에서 직접 사용할 수 있습니다.
내 앱에서 검색을 위해 Elasticsearch를 사용하는 장점은 무엇입니까?
Elasticsearch는 데이터 인덱싱을 어떻게 처리합니까?
데이터 분석에 elasticsearch를 사용할 수 있습니까?
예, Elasticsearch는 검색 엔진 일뿐 만 아니라 강력한 데이터 분석 도구이기도합니다. 그것은 집계를 지원하여 다양한 방식으로 데이터를 집계하고 분석 할 수 있습니다. Elasticsearch를 사용하여 평균, 합 또는 수 계산, 최소 또는 최대 값 찾기, 특정 조건에 따라 데이터 그룹화 등과 같은 복잡한 데이터 분석 작업을 수행 할 수 있습니다.
elasticsearch는 빅 데이터 응용 프로그램에 적합합니까?
예, Elasticsearch는 빅 데이터 응용 프로그램을 처리하도록 설계되었습니다. 분산 시스템이므로 클러스터에 더 많은 노드를 추가하여 수평으로 확장 할 수 있습니다. 이를 통해 많은 양의 데이터를 처리하고 무거운 하중에서도 빠른 검색 결과를 제공 할 수 있습니다. 또한 Elasticsearch는 샤딩 및 복제를 지원하여 확장 성과 신뢰성을 더욱 향상시킵니다.
Elasticsearch 응용 프로그램의 성능을 최적화하는 방법은 무엇입니까?
elasticsearch 응용 프로그램의 성능을 최적화하는 몇 가지 방법이 있습니다. 먼저 노드, 파편 및 복제본 수를 포함하여 Elasticsearch 클러스터를 올바르게 구성해야합니다. 둘째, 배치 인덱싱을 사용하고 새로 고침을 비활성화하고 올바른 분석기를 사용하여 인덱싱 프로세스를 최적화해야합니다. 마지막으로, 가능한 한 쿼리 대신 필터를 사용하여 필터를 사용하고, 집계를 피하고, "설명"API를 사용하여 쿼리가 어떻게 실행되는지 이해하여 검색 쿼리를 최적화해야합니다.