이 기술 문서에서는 클라이언트에서 시작하여 응답이 수신될 때까지 분산된 Couchbase 시스템을 통해 전체 텍스트 검색 쿼리의 수명을 보여줍니다.
서버 세계로 뛰어들기 전에 클라이언트에 대해 조금 더 알아봅시다.
- 사용자가 Couchbase의 SDK 중 하나를 사용하는 애플리케이션/프로그램을 가지고 있는 시스템에서, 또는 단순히 분산된 Couchbase 클러스터에 연결하기 위해 입력한 curl/HTTP(REST) 요청을 가지고 있는 경우.
- 클러스터의 서버 중 하나에 Couchbase 검색 UI를 추가합니다.
- 클러스터의 서버 중 하나에 Couchbase 쿼리 워크벤치를 설치합니다.
- 클러스터의 서버 중 하나에서 Couchbase 쿼리 명령줄 인터페이스를 사용합니다.
지금이 바로 Couchbase가 구성이 필요한 분산형 전체 텍스트 검색 서비스를 호스팅한다는 사실을 알기에 적절한 시기라고 생각됩니다(아직 모르셨다면). 즉, 하나의 클러스터에 전체 텍스트 검색 인덱스를 설정하여 Couchbase 버킷에서 데이터를 수집하면 여러 서버에 인덱스를 분할할 수 있습니다.
Couchbase에서 전체 텍스트 검색 인덱스를 설정하는 방법에 익숙하지 않다면 지금 바로 다음 설명서를 확인해 보시기 바랍니다. 여기. 검색 서비스에서 지원하는 다양한 종류의 쿼리에 대한 자세한 내용을 보려면 다음을 클릭하세요. 여기.
고급 사용자는 인덱스를 충분한 파티션으로 분할하여 인덱싱된 데이터가 '검색' 서비스를 호스팅하는 서버 클러스터 전체에 고르게(어느 정도) 분산되도록 할 가능성이 높습니다. 또한 시스템에 쿼리를 보낼 때 분산된 데이터를 검색하는 것에 대해 걱정할 필요가 없습니다. 검색 서비스가 클러스터 내에서 통신하여 사용자를 위한 완전한 응답을 구성하기 때문입니다.
자세한 내용을 살펴보기 전에, 다음은 클라이언트로부터 요청(쿼리)을 보낸 후 응답을 받는 사용자를 보여주는 GIF입니다. 이 사용자의 Couchbase 클러스터에는 다음과 같이 분할된 전체 텍스트 검색 인덱스가 있습니다. 여섯 부품 이상 세 검색 서비스를 호스팅하는 서버입니다.
클라이언트에서 작성된 전체 텍스트 검색 쿼리는 검색 서비스를 호스팅하는 Couchbase 클러스터의 모든 서버로 타깃팅할 수 있습니다. 검색 쿼리가 거치는 단계는 다음과 같습니다.
- 클라이언트가 검색 요청을 대상으로 하는 서버가 오케스트레이터 또는 조정 노드 외부 요청을 받으면
- 조정 노드는 먼저 인덱스를 조회합니다(인덱스가 존재하는지 확인).
- 조정 노드는 인덱스가 배포된 "계획"을 가져옵니다. 이 계획에는 인덱스가 몇 개의 파티션으로 분할되었는지에 대한 세부 정보와 이러한 파티션이 있는 모든 서버의 정보가 포함되어 있습니다.
- 조정 노드는 "내부" 요청을 발송하는 데 필요한 서버의 고유 목록을 설정합니다. 카우치베이스 클러스터의 서버는 고려 중인 인덱스에 속하는 파티션을 호스팅하는 경우에만 자격이 있습니다.
- 조정 노드에서 내부 요청을 각 서버로 전송한 후에는 서버로부터 응답을 기다립니다. 동시에 인덱스의 파티션이 조정 노드에 상주하는 경우, 검색 요청이 각 파티션에도 전송됩니다(디스크 바인딩).
- 조정 노드로부터 "내부" 요청을 수신하는 클러스터의 서버는 이를 호스팅하는 각 인덱스 파티션으로 전달합니다(디스크 바인딩).
- 서버 내에 상주하는 모든 인덱스 파티션에 동시에 전송되고 서버가 응답을 기다리는 별도의 검색 요청입니다.
- 서버는 호스팅하는 모든 파티션에서 응답을 받으면 각 파티션에서 얻은 결과를 병합한 후 응답으로 패키징하여 조정 노드로 다시 전송합니다.
- 요약하자면, 조정 노드는 ...의 응답을 기다립니다.
- 노드 내에 상주하는 각 인덱스 파티션은
- 내부 요청을 전송한 클러스터의 각 서버에 대해
- 로컬 인덱스 파티션과 원격 인덱스 파티션의 모든 결과를 얻으면 조정 노드는 모든 결과를 병합하여 응답으로 패키징한 다음 요청이 시작된 클라이언트로 다시 전송합니다.
이러한 일련의 단계를 카우치베이스에서는 전체 텍스트 검색 서비스의 분산 수집 작동합니다.
사용자가 클라이언트에서 작성해야 하는 검색 요청은 검색 쿼리와 페이지 매김, 정렬, 점수 매기기 등을 위한 여러 필터(선택 사항)를 캡슐화합니다. 클릭 여기 에서 검색 요청 설정 및 사용 가능한 옵션에 대한 설명서를 참조하세요. 다음은 색인에 대한 검색 요청 예시입니다. 여행 컬 사용 ...
|
1 2 3 |
curl -XPOST -H "콘텐츠 유형:애플리케이션/json" -u 사용자 이름:비밀번호 http://127.0.0.1:8094/api/index/travels/query -d '{"query": {"match": "travel"}, "size": 3}' |
검색 요청과 마찬가지로 검색 응답도 JSON 형식입니다. 다음은 위의 요청에 대해 6개의 인덱스 파티션에서 집계된 상위 3개의 히트를 보여주는 샘플 응답입니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
{ "status": { "total": 6, "실패": 0, "성공": 6 }, "요청": { "query": { "match": "여행", "접두사_길이": 0, "흐릿함": 0, "운영자": "또는" }, "size": 3, "from": 0, "하이라이트": null, "fields": null, "facets": null, "설명": false, "sort": [ "-_score" ], "includeLocations": false, "search_after": null, "search_before": null }, "조회수": [ { "index": "travels_171257755a51518a_54820232", "id": "landmark_22398", "score": 0.7297252942480978, "sort": [ "_score" ] }, { "index": "travels_171257755a51518a_13aa53f3", "id": "landmark_12338", "score": 0.6413638317042266, "sort": [ "_score" ] }, { "index": "travels_171257755a51518a_f4e0a48a", "id": "landmark_7369", "score": 0.6156080123720656, "sort": [ "_score" ] } ], "total_hits": 205, "max_score": 0.7297252942480978, "취하다": 804766, "facets": null } |
검색 응답의 내용에 관해서는 ...
- "상태" 필드에는 ...
- "합계" 결과를 얻고 병합한 인덱스의 파티션 수입니다.
- 이었던 파티션의 수를 "성공' 요청에 응답할 때
- 해당 파티션의 수 "실패"를 클릭하여 어떤 이유로든 요청에 응답합니다.
- "요청" 필드에는 클라이언트로부터 받은 검색 요청(쿼리)이 저장됩니다.
- “조회수"는 객체의 배열이며, 각 객체는 본질적으로 결과 또는 문서 히트를 의미합니다.
- "색인" 필드는 각 객체 내의 문서가 있는 인덱스 파티션입니다.
- "id"는 카우치베이스 버킷에 삽입된 문서 키입니다.
- "점수"는 검색 매개변수에 대한 문서의 관련성이며, 검색 매개변수에 대한 문서의 관련성은 TF-IDF 알고리즘을 사용합니다.
- "정렬"는 획득한 조회수를 정렬하는 데 사용된 필드를 나타냅니다.
- “총 조회수"는 검색 요청(쿼리)에 사용할 수 있는 총 결과 수입니다.
- “max_score"는 문서 히트에 대한 최대 TF-IDF(관련성) 점수입니다.
- “took"는 조정 노드가 요청을 처리하고 집계된 응답을 전송하는 데 걸리는 시간(나노초)입니다.
- “패싯' 검색 쿼리가 패싯/집계 정보를 요청하는 경우 관련 콘텐츠를 포함합니다.
또한 이 검색 응답에 포함되지 않은 항목은 ...
- 인덱스 파티션 중 오류로 인해 요청에 응답하지 못한 경우 별도의 "오류" 하위 필드가 포함되어 오류의 특성을 나타냅니다. 다음은 샘플입니다...
|
1 2 3 4 5 6 7 8 9 10 |
"status": { "total": 6, "실패": 2, "성공": 4, "오류": { "pindex_name_1": "실패 이유", "pindex_name_2": "실패 이유" } } |
- 위의 예는 검색 서비스가 성공한 인덱스 파티션에서만 집계된 결과의 '부분적' 응답으로 사용자에게 응답하는 상황입니다. 사용자는 클러스터의 상태와 일부 인덱스 파티션이 실패하거나 응답하지 않게 된 원인을 조사해야 합니다.
이 글이 도움이 되셨기를 바랍니다. Couchbase Server의 최신 릴리스를 다운로드하려면 다운로드 페이지!