지원 지원 문의 | 시스템 상태 시스템 상태

카탈로그 검색 아키텍처

이 주제에서는 CMS 및 CMS에 사용되는 카탈로그 검색 기술의 아키텍처에 대해 학습합니다. Playback APIs.

개요

2019 년 XNUMX 월 현재 카탈로그 검색 기능이 Elasticsearch로 업그레이드되었습니다. 이 업그레이드는 여러 가지 이점을 제공하며, 그 중 가장 중요한 것은 관련성과 정확성이 향상되고 성능이 크게 향상되어 응답 시간이 훨씬 일관되고 일반적으로 두 배 빠릅니다. 이 새로운 기능은 CMS API, Playback API, Studio 대화식 검색 및 카탈로그 검색 방법.

Brightcove는 Elasticsearch 결과의 일관성을 유지하기 위해 상당한 노력을 기울 였지만 차이가 있으며 검색 결과에 특정 종속성을 코딩 한 경우 통합이 예상대로 작동하지 않을 가능성이 약간 있습니다.

검색 결과 차이 및 영향

Brightcove는 잠재적 영향을 연구 한 결과 90 % 이상의 검색 결과가 반환 된 결과 수와 일치하는 결과를 반환한다는 것을 발견했습니다. 이는 API 통합에 문제를 일으킬 정도로 예상 결과가 다르지 않아야 함을 나타냅니다.

비교

이 그래프는 두 시스템 간의 결과 수와 정확히 일치하는 검색 결과 수를 파란색으로 표시하고 숫자가 다른 검색 결과를 표시합니다.

롤아웃의 일부로, 빈 문자열에 대한 모든 기본 검색은 몇 달 동안 Elasticsearch에서 이미 제공 한 것이므로 사용자는 이미 Elasticsearch 결과를 문제없이보고 사용하고 있습니다.

그러나 이런 종류의 비교에서 우리가 배울 수있는 것에 한계가 있습니다. 기껏해야 특정 검색 의도 만 유추 할 수 있으며 카탈로그 데이터는 유동적입니다.

알려진 차이점

아래의 차이점은 대체로 근본적이거나 검색 결과를 광범위하게 분석 한 후의 결정 결과입니다. 완전히 제거 할 수는 없습니다.

줄기

줄기 활용 된 (또는 때때로 파생 된) 단어를 단어 줄기, 기본 또는 뿌리 양식 — 일반적으로 서면 단어 양식.

줄기에서 작동하는 영어를위한 형태소 분석기 방법 그런 식별해야 문자열 as 고양이, 고양이 같은캐티. 형태소 분석 알고리즘은 단어를 줄일 수도 있습니다 어업, 어업어부 줄기에 물고기. 줄기는 단어 일 필요는 없습니다. 예를 들어 포터 알고리즘은 논쟁, 논쟁하는, 주장, 말다툼아르고스 줄기에 논쟁.

기존 검색에서는 Lancaster (Paice / Husk) 형태소 분석기를 사용합니다.이 알고리즘은 일반적으로 지나치게 공격적인 것으로 간주됩니다. 예를 들어 구별이 이루어지지 않습니다. 거룻배 Lancaster에서 동일한 용어로 간주됩니다.

Elasticsearch는 업계에서 광범위하게 채택되었으며 일반적으로 크게 개선 된 것으로 간주되는 최신의 훨씬 공격적인 알고리즘 (Porter2)을 사용합니다 (Lancaster는 이제 드문 경우). 형태소 분석기의 변경은 잠재적으로 (~ 35 %) 상당한 검색 비율에 영향을 미칩니다. 의지 다르다, 단지 그들이 수도 다를 수 있습니다. 그러나 일반적으로 이것은 더 나을 것입니다. 즉, 일부 고객의 일부는 이전 행동에 의존 할 수 있습니다.

관련성

기존 검색에보다 엄격한 TF 정규화가있는 것 같습니다. 이로 인해 더 큰 필드에서 발견되는 용어에 대해 다른 관련성 정렬이 발생합니다 (즉, 기존은 일치하는 것이 문서의 길이에 비해 더 작기 때문에 해당 용어에 대한 가중치가 적기 때문에 관련성이 떨어집니다).

특수 문자

특수 문자는 기존 검색 내부에서 제거됩니다. 이는 문장 부호 및 관련 문자를 제거하는 것과 거의 동일합니다. 제거하는 대신 일반적으로 Elasticsearch에서 해당 문자를 이스케이프하므로 검색에서 대신 고려할 가능성이 있습니다.

용어 처리

기존 검색 쿼리는 'term smooshing'을 수행하는 반면 Elasticsearch에서는 잘못된 용어를 삭제합니다. tags: 기간: q=tags: state:ACTIVE

  • 현존하는: tags:state:ACTIVE — 태그가있는 동영상 검색 state:ACTIVE
  • 탄성 검색: state:ACTIVE — 빈 용어를 삭제

매달린 구두점 처리 및 일반적으로 잘못된 쿼리 처리와 관련된 여러 가지 미묘한 사례가 있습니다. 우리는 쿼리가 의도 한 것으로 생각하는 것을 생성하려고 시도하지만,이 경우 사용자가 의도 한 것을 추측합니다 ( 실제로 검색을 구체화 할 수있는 오류를 반환했을 때)

재생 가능

현재 재생 가능한 동영상으로 검색을 제한하는 두 가지 메커니즘이 있습니다. 검색어에 플래그를 포함 시키거나 검색어 자체에 재생성의 일부 측면이 필요할 수 있습니다.

  • 기존 : 업데이트 된 필드 값을 기반으로 쿼리됩니다.
  • Elasticsearch : 계산 된 날짜 범위를 기준으로 쿼리됩니다.

Elasticsearch는 일반적으로 더 정확하고 더 나은 결과를 제공해야합니다 (기존 메커니즘과 관련된 지연이 있으며 플래그 유지 관리 메커니즘이 완전히 신뢰할 수있는 것은 아닙니다).

색인 정확도

Elasticsearch 색인은 기존 색인보다 '신선'하며 업데이트를 더 빨리 반영하는 경향이 있습니다. 항상 그런 것은 아니지만 일반적으로 Elasticsearch의 경험은 결과가 기본 카탈로그 데이터의 상태를보다 정확하게 반영한다는 것입니다. 기존 검색과 Elasticsearch는 모두 분산 시스템이므로 반환되는 결과가 완전히 일치하지는 않습니다. 두 시스템에 대해 반복 된 쿼리는 다른 결과를 반환 할 수 있습니다 (특히 여러 개의 동시 실행 삭제 작업이있는 경우).

기존 검색 결과는 계정이 할당 된 샤드 상태에 따라 변경됩니다. 특정 샤드의 글로벌 상태는 특정 쿼리 결과에 영향을 줄 수 있으며 영향을 미칩니다. Elasticsearch에는 이러한 결함이 없습니다.

예제 1

다음 제목의 동영상이 2 개 있다고 가정 해 보겠습니다.

      Video#1: has the title “Don’t look into the light”
      Video#2: has the title “Using a lighter to make a campfire”

사용자는 단어 "light"가 있어야하는 모든 비디오를 반환하려고합니다. 사용하여 CMS API쿼리는 다음과 같습니다.

      q=%2Blight or q=+light

기존 검색을 사용하면 두 동영상 모두 순서대로 반환됩니다.

      Video#2 - “Using a lighter to make a campfire”
      Video#1 - “Don’t look into the light”

이것에는 두 가지 문제가 있습니다 :

  • 관련성: 순서가 잘못되었습니다. “캠프 파이어를 만들기 위해 라이터 사용”(비디오 # 2) 전에“빛을 보지 마십시오”(비디오 # 1)가 나타나야합니다.
  • 정확성: 비디오 타이틀에 "light"라는 단어가 전혀 표시되지 않으므로 "라이터를 사용하여 모닥불 만들기"도 결과 세트에 나타나지 않아야합니다.

Elasticsearch를 사용하면 동영상 1 만 반환합니다.

      Video#1 - “Don’t look into the light”

다음과 같은 이유로 개선되었습니다.

  • 관련성 : 순서가 정확합니다.
  • 정확도 : 제목에 "light"라는 단어가있는 유일한 비디오이므로 비디오 하나만 반환됩니다.

예제 2

우리 CMS API 형태소 분석을위한 설명서, 형태소 분석은 지원되지만 부분 단어 검색은 지원되지 않습니다. 제목이 다음과 같은 5 개의 비디오가 있다고 가정 해 보겠습니다.

      Video#1 - "Parking Ban Announced"
      Video#2 - "Parking to be Banned"
      Video#3 - "City Banning Parking"
      Video#4 - "Bank Holiday"
      Video#5 - "Bandit Captured"

사용자는 단어가 있어야하는 모든 비디오를 반환하려고합니다 이름 필드에. 사용하여 CMS API쿼리는 다음과 같습니다.

      q=%2Bname%3Aban or q=+name:ban

"Ban", "Banning"및 "Banned"는 "Ban"이 세 가지 모두의 줄기이므로 검색 결과를 생성 할 것으로 예상됩니다.

그러나 현재 검색 시스템에서는 다음 순서로 XNUMX 개의 비디오가 모두 반환됩니다.

      Video#2 - "Parking to be Banned"
      Video#3 - "City Banning Parking"
      Video#1 - "Parking Ban Announced"
      Video#4 - "Bank Holiday"
      Video#5 - "Bandit Captured"

다시 말하지만, 여기에는 두 가지 문제가 있습니다.

  • 관련성 : 주문이 잘못되었습니다. "Parking Ban Announced"는 "Ban"이라는 단어가 포함 된 첫 번째 비디오 여야합니다.
  • 정확도 : "Ban"은 "Bank"또는 "Bandit"의 일부가 아니므로 "Bank Holiday"및 "Bandit Captured"는 전혀 반환되지 않아야합니다.

Elasticsearch를 사용하면 결과는 다음과 같습니다.

      Video#1 - "Parking Ban Announced"
      Video#2 - "Parking to be Banned"
      Video#3 - "City Banning Parking"

다음과 같은 이유로 개선되었습니다.

  • 관련성 : 순서가 정확합니다.
  • 정확성 : 단어 "Ban"( "Ban", "Banning"및 "Banned")의 스템이있는 비디오 만 반환됩니다.

12 년 2020 월 XNUMX 일에 마지막으로 업데이트 된 페이지