Elasticsearch: 사용 하기 쉬 운 전문 검색 라 이브 러 리

17403 단어 #Elasticsearch
주의: 본 논문 의 내용 은 모두 에서 나 온 것 으로 독서 노트 를 하 는 동시에 총 결 을 하 는 것 입 니 다.Elasticsearch 는 http 기반 Restful 을 사용 하여 구현 하고 사용 하기 때문에 curl 을 사용 하여 테스트 합 니 다.curl 을 사용 하지 않 으 면 다양한 언어의 대응 http 요청 을 사용 할 수 있 습 니 다.
Elasticsearch
클 러 스 터 는 색인, 색인 포함 유형, 형식 저장 문서, 문 서 는 속성 이 있 습 니 다.
능력.
확장 가능, 전문 검색, 분석, 저장
예 를 들다
  • 온라인 웹 상점, 사용자 검색 제품 지원 (제품 목록 저장, 제품 검색, 보완 제안)
  • 운행 데이터 수집, 분석 데이터
  • 가격 경고 플랫폼
  • 분석, 신속 투자, 분석, 시각 화 등
  • ……

  • 기본 개념:
  • 실시 간 접근
  • 군집
  • 노드: 클 러 스 터 중의 단독 서비스
  • 색인: Elasticsearch 에 데 이 터 를 저장 하 는 행 위 를 색인
  • 이 라 고 합 니 다.
  • 문서: 가장 기본 적 인 색인 정보, JSON
  • 조각 & 던 전: 조각 (분할 / 확장 내용 볼 륨, 배포 및 병행 작업), 던 전: (높 은 가용성 (조각 이나 노드 가 사용 되 지 않 을 때), 검색 볼 륨 확장 허용)
  • 쓰다
    데이터 넣 기 및 검색
    데 이 터 를 넣다
    curl -X PUT "localhost:9200/megacorp/employee/1" -H 'Content-Type: application/json' -d'
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }
    '

    데이터 읽 기
    curl -X GET "localhost:9200/megacorp/employee/1"

    단순 검색
    curl -X GET "localhost:9200/megacorp/employee/_search"

    매개 변수 단순 검색
    curl -X GET "localhost:9200/megacorp/employee/_search?q=last_name:Smith"

    검색
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "query" : {
            "match" : {
                "last_name" : "Smith"
            }
        }
    }

    필터 검색
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "query" : {
            "bool": {
                "must": {
                    "match" : {
                        "last_name" : "smith" 
                    }
                },
                "filter": {
                    "range" : {
                        "age" : { "gt" : 30 } 
                    }
                }
            }
        }
    }
    '

    전체 텍스트 에서 이 기능 을 검색 하면 관련 검색 을 실현 할 수 있 습 니 다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "query" : {
            "match" : {
                "about" : "rock climbing"
            }
        }
    }
    '

    구문 검색 은 정확 한 검색 입 니 다. 이 검색 모드 를 사용 하면 정확 한 결 과 를 되 돌려 줍 니 다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "query" : {
            "match_phrase" : {
                "about" : "rock climbing"
            }
        }
    }
    '

    하 이 라이트 검색 하 이 라 이 트 는 검색 결 과 를 표시 합 니 다. 검색 결과 의 일치 부분 으로 패키지 합 니 다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "query" : {
            "match_phrase" : {
                "about" : "rock climbing"
            }
        },
        "highlight": {
            "fields" : {
                "about" : {}
            }
        }
    }
    '

    분석 하 다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
      "aggs": {
        "all_interests": {
          "terms": { "field": "interests" }
        }
      }
    }
    '

    분석 과 동시에 검색 하 는 방식 은 match 필드 의 값 과 일치 하 며 분석 합 니 다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
      "query": {
        "match": {
          "last_name": "smith"
        }
      },
      "aggs": {
        "all_interests": {
          "terms": {
            "field": "interests"
          }
        }
      }
    }
    '

    집합 등급 집합 은 정렬 에 따라 등급 별 분석 을 하고 집합 한다.
    curl -X GET "localhost:9200/megacorp/employee/_search" -H 'Content-Type: application/json' -d'
    {
        "aggs" : {
            "all_interests" : {
                "terms" : { "field" : "interests" },
                "aggs" : {
                    "avg_age" : {
                        "avg" : { "field" : "age" }
                    }
                }
            }
        }
    }
    '

    문서 제어
    문서 에 넣 은 웹 사 이 트 는 색인 이 고 블 로 그 는 형식 이 며 123 은 id 입 니 다.이 기능 을 사용 하면 문 서 를 업데이트 할 수 있 습 니 다.
    curl -X PUT "localhost:9200/website/blog/123" -H 'Content-Type: application/json' -d'
    {
      "title": "My first blog entry",
      "text":  "Just trying this out...",
      "date":  "2014/01/01"
    }
    '

    상술 한 방법 을 사용 하면 문서 에 업 데 이 트 를 가 져 올 수 있 기 때문에, 때때로 우 리 는 문 서 를 업데이트 하고 싶 지 않다.그래서 다음 과 같은 두 가지 방법 으로 만 들 수 있 습 니 다.
            op_type    -     :
    PUT /website/blog/123?op_type=create
    { ... }
    
            URL      /_create :
    PUT /website/blog/123/_create
    { ... }

    이렇게 하면 성공 적 으로 생 성 되 었 을 때 201 을 되 돌려 줍 니 다. 그렇지 않 으 면 409 충돌 응답 코드 를 되 돌려 줍 니 다.자동 생 성 id
    curl -X POST "localhost:9200/website/blog/" -H 'Content-Type: application/json' -d'
    {
      "title": "My second blog entry",
      "text":  "Still trying this out...",
      "date":  "2014/01/01"
    }
    '

    문서 되 찾기
    curl -X GET "localhost:9200/website/blog/123?pretty"

    문서 가 존재 하 는 지 확인 합 니 다.
    curl -i -XHEAD http://localhost:9200/website/blog/123

    문서 삭제
    curl -X DELETE "localhost:9200/website/blog/123"

    처리 병발
    병발 에 대해 두 가지 방식 이 있다.
    비관 적 인 병행 제어 라 는 방법 은 관계 형 데이터 베이스 에 의 해 광범 위 하 게 사용 되 고 있 으 며, 변경 충돌 이 발생 할 수 있다 고 가정 하기 때문에 충돌 을 방지 하기 위해 자원 방문 을 막는다.한 줄 의 데 이 터 를 읽 기 전에 잠 그 고 잠 긴 스 레 드 만 이 줄 의 데 이 터 를 수정 할 수 있 도록 하 는 전형 적 인 예 이다.
    Elasticsearch 에서 사용 하 는 이러한 방법 은 충돌 이 발생 할 수 없다 고 가정 하고 시도 하고 있 는 작업 을 막 지 않 습 니 다.그러나 원본 데이터 가 읽 기와 쓰기 에서 수정 되면 업데이트 가 실 패 됩 니 다.응용 프로그램 은 다음 에 충돌 을 어떻게 해결 해 야 할 지 결정 할 것 이다.예 를 들 어 새로운 데 이 터 를 다시 시도 하거나 사용 하거나 관련 상황 을 사용자 에 게 보고 할 수 있다.
    낙관적 인 병행 제어 지정 버 전 번 호 를 사용 하여 응용 을 수정 합 니 다.
    curl -X PUT "localhost:9200/website/blog/1?version=1" -H 'Content-Type: application/json' -d'
    {
      "title": "My first blog entry",
      "text":  "Starting to get the hang of this..."
    }
    '

    외부 시스템 을 통한 버 전 관리
    curl -X PUT "localhost:9200/website/blog/2?version=5&version_type=external" -H 'Content-Type: application/json' -d'
    {
      "title": "My first external blog entry",
      "text":  "Starting to get the hang of this..."
    }
    '

    문서 의 부분 업데이트
    curl -X POST "localhost:9200/website/blog/1/_update" -H 'Content-Type: application/json' -d'
    {
       "doc" : {
          "tags" : [ "testing" ],
          "views": 0
       }
    }
    '

    문서 일괄 되 찾기
    curl -X GET "localhost:9200/_mget" -H 'Content-Type: application/json' -d'
    {
       "docs" : [
          {
             "_index" : "website",
             "_type" :  "blog",
             "_id" :    2
          },
          {
             "_index" : "website",
             "_type" :  "pageviews",
             "_id" :    1,
             "_source": "views"
          }
       ]
    }
    '

    기본 색인 값 이나 형식 값 을 사용 하면 덮어 쓸 수 있 습 니 다.
    curl -X GET "localhost:9200/website/blog/_mget" -H 'Content-Type: application/json' -d'
    {
       "docs" : [
          { "_id" : 2 },
          { "_type" : "pageviews", "_id" :   1 }
       ]
    }
    '

    결론.
    Elasticsearch 의 사용 은 매우 간단 하고 편리 합 니 다. 응용 개발 자 에 게 Elasticsearch 를 바탕 으로 자신의 응용 프레임 워 크 를 통합 하면 Elasticsearch 를 쉽게 사용 할 수 있 습 니 다. 또한 Elasticsearch 는 NoSQL 의 저장 방식 으로 도 사용 할 수 있 습 니 다. 즉, Elasticsearch 를 사용 하여 저장 과 데이터 분석, 검색 등 기능 을 할 수 있 고 실현 도 매우 강력 합 니 다.

    좋은 웹페이지 즐겨찾기