Ees 소개 高 확장성이 뛰어난 오픈 소스 전문 검색 및 분석 엔진으로 대용량 데이터를 실시간으로 빠르게 저장, 검색 및 분석할 수 있습니다. 전체 텍스트 검색은 컴퓨터 색인 프로그램이 기사의 각 단어를 스캔하여 각 단어에 대한 색인을 구축하고 사용자가 쿼리할 때 기사의 단어 수와 위치를 나타내는 것을 의미합니다. 인덱스 검색 방법을 확립하고 검색 결과를 사용자에게 다시 제공합니다. 이 과정은 사전의 검색어 목록을 통해 단어를 찾는 과정과 유사하다. 검색 엔진 데이터베이스의 데이터에 대한 전체 텍스트 검색
Mysql에는 용어 사전 레이어만 있으며 B-트리 정렬 방식으로 디스크에 저장됩니다. 용어를 검색하려면 여러 가지 무작위 액세스 디스크 작업이 필요합니다. Lucene은 검색 속도를 높이기 위해 용어 사전에 용어 색인을 추가합니다. 용어 색인은 트리 형태로 메모리에 캐시됩니다. 용어 색인에서 해당 용어 사전의 블록 위치를 찾은 후 디스크로 이동하여 용어를 찾으면 디스크에 대한 무작위 액세스 횟수가 크게 줄어 듭니다. 또한 인덱스라는 용어는 FST(유한 상태 변환기) 형식으로 메모리에 저장되므로 메모리를 매우 절약합니다. 용어 사전은 블록 단위로 디스크에 저장됩니다. 예를 들어 모든 단어가 Ab로 시작하는 경우 Ab는 생략될 수 있습니다. 이러한 방식으로 용어 사전은 b-tree보다 더 많은 디스크 공간을 절약할 수 있습니다.
[관련 학습 권장 사항:
mysql tutorial]가능한 문제elasticsearch 데이터 복제 및 증분 동기화
아래 기본 구성으로, Tracking_column 값은 @timestamp 입니다. _id 값은 elasticsearch에 저장되는 시점입니다. 이 값의 주요 기능은 mysql의 기본 키와 유사합니다. 타임스탬프는 실제로 항상 변경되므로 select 문을 사용하여 쿼리할 때마다 데이터가 Elasticsearch에 저장되므로 데이터가 중복됩니다.(2) 많은 수의 쿼리가 데이터베이스를 드래그하지 않도록 mysql 쿼리 범위를 설정합니다. WHERE autoid > :sql_last_value;
sql 문에서 Elasticsearch의 저장 용량이 계속 늘어나고 있습니다
elasticsearch 데이터 보안을 위해 데이터를 받은 후 먼저 메모리와 트랜스로그에 데이터를 쓴 다음 인덱스를 생성하여 디스크에 씁니다. , 갑작스러운 정전이 발생하더라도 다시 시작한 후 translog를 통해 복원할 수 있습니다. 그러나 쿼리할 때마다 중복된 데이터가 많고 이러한 중복된 데이터는 elasticsearch 인덱스에 기록되지 않으므로 누적됩니다. Elasticsearch 용량이 계속 증가합니다
해결책:
쿼리 공식 홈페이지에는 정기적으로 새로 고쳐지고 오래된 로그가 자동으로 정리되므로 처리가 필요하지 않다고 나와 있습니다.
증분 동기화 및 mysql 범위 쿼리로 인해 mysql 데이터베이스가 작동할 때 이전 데이터와 동기화할 수 없습니다. 수정되었습니다.
매번 MySQL 소규모 쿼리를 해결하여 데이터베이스 압박 문제를 해결했으나, 오래된 데이터의 수정을 동기화할 수 없는 문제가 발생했습니다.
해결책:
업무 상황에 따라 할 수 있습니다. 데이터베이스가 자주 수정되면 전체 업데이트만 할 수 있지만, 데이터베이스를 높은 빈도와 넓은 범위로 스캔하여 인덱싱하는 것이 전혀 인덱싱하지 않는 것보다 낫습니다(인덱싱도 비용이 많이 들기 때문입니다). 자주 수정되지 않는 데이터로 인해 데이터베이스 성능이 많이 소모됩니다. 여기서는 데이터 수정이 적고 일반적으로 수정 사항은 최근 데이터입니다. 동기화하는 동안 mysql 범위를 약간 조정했기 때문입니다
php 작곡가를 사용하여 Composer require elasticsearch/elasticsearch를 설치합니다
es 파일 자동 로드 .php를 소개합니다. 파일, IP 주소 설정
인덱스 생성, 인덱스는 MySQL의 인덱스가 아닌 관계형 데이터(이하 MySQL)의 데이터베이스에 해당합니다
데이터베이스를 갖는 것만으로는 충분하지 않습니다. 테이블을 생성해야 합니다. ES, ES의 경우에도 마찬가지입니다. in의 유형은 MySQL의 테이블에 해당합니다. type은 별도로 정의되지 않지만 본문에 정의된 필드와 함께 정의됩니다. 물론 본문 필드에서 ik 단어 분할을 사용할 수도 있습니다.
검색을 구현하려면 EsClient->search()를 사용하세요. 동의어 및 동의어 사용
[관련 학습 권장 사항: php 프로그래밍(동영상)]
만들기 es 디렉토리의 플러그인을 위한 ik 디렉토리에서 다운로드한 ik의 zip 패키지에 있는 모든 파일의 압축을 풉니다.
es의 config 디렉터리로 이동하여 elasticsearch.yml을 편집하고 빈 공간에 index.analytic.analyzer.default.type: “ik”을 추가합니다.
병음 단어 분할기 구성: 컴파일된 것 사용: elasticsearch-analytic-pinyin-1.3.0
elasticsearch의 플러그인 디렉토리에서 새로운 analyze-pinyin 폴더를 만들고, 압축된 패키지의 압축을 풀고, jar 패키지를 analyze-pinyin 안에 넣습니다. 접는 사람.
elasticsearch.yml에서 병음 토크나이저의 필터를 구성하세요
동의어 사전을 구성하고 elasticsearch .txt의 구성 디렉터리에 새 sysnonym을 생성하세요 .
주로 단어 분할기의 이름과 유형, 단어 요소 분할을 위한 구성 요소, 분할된 차원 처리를 포함하는 ik+pinying + 동의어 단어 분할기를 구성합니다. 여기에서는 병음과 동의어가 사용됩니다
2) 노드가 이를 각 샤드로 전달하고 각 샤드의 상위 10개 항목을 쿼리합니다.
3) 결과가 노드로 반환됩니다. 데이터가 통합되어 추출됩니다. 처음 10개의 항목
4)이 요청한 클라이언트에게 반환됩니다
항목 10부터 20까지의 데이터를 쿼리할 때 깊이 페이징(from-size)과 스냅샷 페이징(스크롤)의 두 가지 방법이 있습니다. ;
깊이 페이징(from-size)
프로세스:
위 내용은 MySQL과 PHP에서 ES의 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!