Elastic Search 학습 노트 (2) 검색

Elasticsearch 는 저장 만 하 는 것 이 아 닙 니 다 (stores) 문서, 검색 할 수 있 도록 문서 에 색인 추가 (indexes) ,구조 화 된 JSON 문 서 를 사용 하 는 이유 이기 도 합 니 다. 구조 화 된 바 이 너 리 데이터 가 아 닙 니 다.
문서 의 모든 필드 가 색인 되 고 조회 할 수 있 습 니 다. 。전체 텍스트 검색 은 키워드 와 일치 하 는 모든 문 서 를 찾 아 관련 성 (relevance) 에 따라 찾 을 수 있 습 니 다. 정렬 후 결 과 를 되 돌려 줍 니 다.
1. 빈 검색
API 를 검색 하 는 가장 기본 적 인 형식 은 어떤 검색 도 지정 하지 않 은 빈 검색 입 니 다. ,클 러 스 터 의 모든 색인 에 있 는 모든 문 서 를 간단하게 되 돌려 줍 니 다.
GET /_search

돌아 온 결과 (화면 을 위해 간결 하 게 편집 한 것) 이렇게:
{
   "hits" : {
      "total" :       14,
      "hits" : [
        {
          "_index":   "us",
          "_type":    "tweet",
          "_id":      "7",
          "_score":   1,
          "_source": {
             "date":    "2014-09-17",
             "name":    "John Smith",
             "tweet":   "The Query DSL is really powerful and flexible",
             "user_id": 2
          }
       },
        ... 9 RESULTS REMOVED ...
      ],
      "max_score" :   1
   },
   "took" :           4,
   "_shards" : {
      "failed" :      0,
      "successful" :  10,
      "total" :       10
   },
   "timed_out" :      false
}

hits
결과 로 돌아 가 는 가장 중요 한 부분 은?  hits  ,그것 포함 하 다  total  필드 는 일치 하 는 문서 의 총 수 를 표시 하고 하 나 를 표시 합 니 다.  hits  배열 은 검색 결과 의 10 개 문 서 를 포함 합 니 다.
... 에 있다  hits  배열 의 모든 결 과 는 문 서 를 포함 합 니 다.  _index  、  _type  、  _id  ,더 하 다  _source  필드이것 은 우리 가 되 돌아 오 는 검색 결과 에서 전체 문 서 를 직접 사용 할 수 있다 는 것 을 의미한다.이것 은 다른 검색엔진 과 는 달리 문서 의 ID 만 되 돌려 줍 니 다. 문 서 를 따로 가 져 와 야 합 니 다.
결과 마다 하나 더 있어 요.  _score  ,그것 은 문서 와 조회 의 일치 정 도 를 평가 했다.기본적으로 가장 관련 된 문서 결 과 를 되 돌려 줍 니 다. 즉, 되 돌아 오 는 문 서 는  _score  내림차 순 으로 배열 되 어 있다.이 예 에서 우 리 는 어떠한 조회 도 지정 하지 않 았 기 때문에 모든 문 서 는 같은 연관 성 을 가지 기 때문에 모든 결과 에 있어 서  1  중성 적  _score  。 max_score  값 은 검색 에 일치 하 는 문서 입 니 다.  _score  의 최대 치.
took took  전체 검색 요청 을 수행 하 는 데 몇 밀리초 가 걸 렸 는 지 알려 줍 니 다.
shards _shards  부분 적 검색 에 참여 한 영화 의 총수 와 이 영화 들 이 몇 개 성 공 했 는 지, 몇 개 실 패 했 는 지 알려 주세요.정상 적 인 상황 에서 우 리 는 영화 분할 실 패 를 원 하지 않 지만, 영화 분할 실 패 는 발생 할 수 있다.만약 우리 가 재난 수준의 고장 을 당 한다 면, 이 고장 에서 같은 조각의 원시 데이터 와 복사 본 을 잃 어 버 렸 다 면, 이 조각 에 대해 서 는 검색 요청 에 응답 할 수 있 는 복사 본 이 없 을 것 이다.만약 그렇다면 Elasticsearch 는 이 필름 이 실 패 했 음 을 보고 하지만 나머지 필름 의 결 과 를 계속 되 돌려 줍 니 다.
timeout timed_out  시간 초과 여 부 를 알 수 있 습 니 다.기본적으로 검색 요청 은 시간 을 초과 하지 않 습 니 다. 결과 보다 낮은 응답 시간 이 더 중요 하 다 면 지정 할 수 있 습 니 다.  timeout  10 또는 10ms (10 밀리초) 또는 1s (1 초):
GET /_search?timeout=10ms

요청 시간 이 초과 되 기 전에 Elasticsearch 는 각 조각 에서 성공 적 으로 얻 은 결 과 를 되 돌려 줍 니 다.
2. 다 중 색인 다 중 형식
특정한 색인 이나 형식 을 제한 하지 않 으 면 클 러 스 터 의 모든 문 서 를 검색 합 니 다.Elasticsearch 는 검색 요청 을 각각 메 인 필름 이나 복사 본 으로 나 누 어 조회 한 10 개의 결 과 를 모 아 우리 에 게 되 돌려 주 었 습 니 다.
URL 에 색인 과 종 류 를 지정 할 수 있 습 니 다./_search
모든 색인 에서 모든 종 류 를 검색 합 니 다./gb/_search
... 에 있다  gb  색인 에서 모든 종 류 를 검색 합 니 다./gb,us/_search
... 에 있다  gb  화해시키다  us  색인 에서 모든 문 서 를 검색 합 니 다./g*,u*/_search
어떤  g  혹은  u  시작 색인 에서 모든 종 류 를 검색 합 니 다./gb/user/_search
... 에 있다  gb  색인 검색  user  유형/gb,us/user,tweet/_search
... 에 있다  gb  화해시키다  us  색인 검색  user  화해시키다  tweet  유형/_all/user,tweet/_search
모든 색인 에서 검색  user  화해시키다  tweet  유형
tips: 하나의 색인 을 검색 하면 다섯 개의 메 인 블록 과 다섯 개의 색인 을 검색 할 때 각각 한 개의 블록 이 있 습 니 다. 정확히 말 하면 등가 입 니 다.
3. 페이지 나 누 기
이전 빈 검색 에서 클 러 스 터 에 있 음 을 설명 하 였 습 니 다. 14 개의 문서 가 (empty) query 와 일치 합 니 다.하지만  hits  배열 에는 10 개의 문서 만 있다.어떻게 해야만 다른 문 서 를 볼 수 있 습 니까?SQL 사용  LIMIT  키워드  page  결 과 는 방법 이 같 습 니 다. Elasticsearch 받 아들 이기 from 화해시키다  size  인자:size
되 돌려 야 할 결과 의 수 를 표시 합 니 다. 기본 값 은?  10 from
건 너 뛰 어야 할 초기 결과 수 를 표시 합 니 다. 기본 값 은?  0
페이지 당 5 개의 결 과 를 보 여 준다 면 1 ~ 3 페이지 의 결 과 를 아래 방식 으로 요청 할 수 있 습 니 다.
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10

페이지 가 너무 깊 고 한 번 에 너무 많은 결 과 를 요청 하 는 상황 을 고려 하여 결과 집합 은 돌아 가기 전에 정렬 합 니 다.그러나 한 가지 요 구 는 항상 여러 개의 조각 을 뛰 어 넘 고 모든 조각 은 자신의 정렬 결 과 를 만들어 야 한 다 는 것 을 기억 하 세 요. 이런 결 과 는 전체 순서 가 정확 하도록 집중 적 으로 정렬 해 야 합 니 다.
tips: 분포 식 시스템 에서 결과 정렬 에 대한 원 가 는 페이지 의 깊이 에 따라 지수 가 상승 합 니 다.이것 이 바로 웹 검색엔진 이 어떤 조회 에 도 1000 개가 넘 는 결 과 를 되 돌려 주지 않 는 이유 다.
4. 경 량 검색
두 가지 형식 이 있어 요.   API: 하 나 는 '경 량' 입 니 다. 검색 문자열 버 전, 검색 문자열 에 모든 인 자 를 전달 해 야 합 니 다. 다른 하 나 는 더 완전한 것 입 니 다. 요청 체 버 전, JSON 형식 과 더 풍부 한 검색 표현 식 을 검색 언어 로 사용 해 야 합 니 다.
검색 문자열 검색 은 명령 행 을 통 해 즉석 검색 에 매우 적합 합 니 다.검색  tweet  형식 중  tweet  필드 포함  elasticsearch  단어의 모든 문서:
GET /_all/tweet/_search?q=tweet:elasticsearch

즉석 조회 (Ad Hoc) 는 사용자 가 자신의 수요 에 따라 유연 하 게 조회 조건 을 선택 하고 시스템 은 사용자 의 선택 에 따라 해당 하 는 통계 보고 서 를 생 성 할 수 있다. 즉석 조 회 는 일반 응용 조회 와 가장 큰 차이 점 은 일반적인 응용 조회 가 맞 춤 형 으로 개 발 된 것 이 고 즉석 조 회 는 사용자 가 조회 조건 을 사용자 정의 한 것 이다.별도의 SQL 구문 으로 실 행 된 조 회 는 즉석 조회 입 니 다. 예 를 들 어 C \ # 프로그램 에 포 함 된 SQL 구문 이나 SSMS 에 있 는 새 조회 창, 자신 이 입력 한 SQL 코드 는 즉석 조회 입 니 다.그리고 SQL 코드 를 저장 과정 에 넣 고 저장 과정 이나 함수 나 트리거 로 실행 하 는 조 회 는 즉석 조회 가 아 닙 니 다. 즉석: 즉석, 즉석에서 조회 하 는 것 입 니 다.
_모든 필드
이 간단 한 검색 은 포함 을 되 돌려 줍 니 다.  mary  모든 문서:
GET /_search?q=mary

문 서 를 색인 할 때 Elasticsearch 는 모든 필드 의 값 을 꺼 내 큰 문자열 로 연결 합 니 다.  _all  필드 인덱스 진행.특정 필드 를 설정 하지 않 으 면 검색 문자열 을 사용 합 니 다.  _all  필드 검색.
더 복잡 한 조회
아래 의 조 회 는 트 위 터 형식 에 대해 다음 과 같은 조건 을 사용 합 니 다.
  • name  필드 에 포함  mary  혹은  john
  • date  값 이 크다  2014-09-10
  • _all  필드 포함  aggregations  혹은  geo
  • +name:(mary john) +date:>2014-09-10 +(aggregations geo)

    검색 문자열 검색 은 모든 사용자 가 색인 의 임 의 필드 에서 느 리 고 중량급 의 조 회 를 실행 할 수 있 도록 합 니 다. 이 는 프라이버시 정 보 를 노출 시 키 고 클 러 스 터 를 무 너 뜨 릴 수 있 습 니 다.또한 일부 검색 문자열 의 작은 문법 오류 로 인해 검색 결 과 를 얻 을 수 없 기 때문에 사용자 에 게 검색 문자열 검색 기능 을 직접 노출 하 는 것 을 추천 하지 않 습 니 다. 클 러 스 터 와 데이터 에 있어 서 그들 을 매우 신뢰 하지 않 는 한.
    반면 우 리 는 생산 환경 에서 기능 이 전면적 인 것 을 더 많이 사용한다. request body API 를 조회 하면 상기 모든 기능 을 완성 할 수 있 을 뿐만 아니 라 추가 기능 도 있다.그러나 그 단계 에 도달 하기 전에 데이터 가 Elasticsearch 에서 어떻게 색인 되 었 는 지 먼저 알 아야 한다.

    좋은 웹페이지 즐겨찾기