용어 부스팅으로 문서의 순위 향상

완료됨

가장 관련성이 큰 결과가 먼저 표시될 때 검색이 가장 잘 작동합니다. 모든 검색 엔진은 검색 쿼리에 대해 가장 관련성이 큰 결과를 반환하려고 합니다. Azure AI 검색은 전체 텍스트 검색을 위해 Apache Lucene의 향상된 버전을 구현합니다.

여기서는 좀 더 복잡한 Lucene 쿼리를 작성하는 방법을 살펴봅니다. 그런 다음 검색 쿼리에서 특정 용어를 부스팅하여 결과의 관련성을 개선합니다.

인덱스 검색

Azure AI 검색을 사용하면 REST 엔드포인트를 사용하거나 Azure Portal 내에서 검색 탐색기 도구를 사용하여 인덱스를 쿼리할 수 있습니다. 쿼리 처리 단계를 빠르게 요약하려면 Azure AI 검색 솔루션 만들기검색 인덱스 단원을 참조하세요.

쿼리 처리의 네 단계를 보여 주는 다이어그램.

이 단원에서는 쿼리 구문 분석에 집중합니다.

검색 탐색기를 사용하여 간단한 쿼리 형식과 전체 쿼리 형식을 사용할 때의 차이점과 이것이 검색 결과에 미치는 영향을 확인할 수 있습니다.

참고 항목

쿼리를 직접 실행하려면 Azure 구독이 필요합니다. Azure AI 검색 서비스를 만들고 호텔의 샘플 데이터를 인덱스로 가져옵니다.

간단한 쿼리 만들기

호텔 샘플 데이터에는 설명, 객실 세부 정보 및 위치가 포함된 50개의 호텔이 포함되어 있습니다. 호텔 예약 사업을 운영하고 있으며, 사용자가 호텔을 예약할 수 있는 앱이 있다고 상상해보겠습니다. 사용자가 검색할 수 있어서 가장 관련성이 큰 호텔이 먼저 표시되어야 합니다.

한 고객이 고급 호텔을 찾으려고 시도하는 사용 사례가 있습니다. 먼저 다음의 간단한 쿼리에서 검색 결과를 확인하여 시작합니다.

search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true

쿼리 구문 분석에서는 인덱스의 문서에 대한 모든 필드에서 용어 luxury를 검색합니다.

또한 쿼리 문자열은 select 옵션을 추가하여 문서에서 반환된 필드를 제한합니다.

&$select=HotelId, HotelName, Category, Tags, Description

쿼리의 마지막 매개 변수는 인덱스에 총 결과를 계산하도록 요청합니다.

$count=true

어휘 분석이 필요하지 않으므로 문서 검색이 14개의 문서를 반환합니다. 처음 세 가지는 다음과 같습니다.

{
  "@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@odata.count": 14,
  "value": [
    {
      "@search.score": 2.633778,
      "HotelId": "13",
      "HotelName": "Historic Lion Resort",
      "Description": "Unmatched Luxury.  Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
      "Category": "Budget",
      "Tags": [
        "view",
        "free wifi",
        "free wifi"
      ]
    },
    {
      "@search.score": 2.1104424,
      "HotelId": "18",
      "HotelName": "Oceanside Resort",
      "Description": "New Luxury Hotel.  Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
      "Category": "Budget",
      "Tags": [
        "view",
        "laundry service",
        "air conditioning"
      ]
    },
    {
      "@search.score": 1.966516,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown.  On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Category": "Luxury",
      "Tags": [
        "continental breakfast",
        "view",
        "view"
      ]
    },
    ...
  ]
}

럭셔리로 간주되는 최고의 호텔이 예산 범주에 속하며 에어컨이 없다는 사실에 고객은 놀랄 수 있습니다. 고객이 검색에 여러 단어를 입력하는 경우 앱은 모든 용어가 결과에 있어야 한다고 가정하므로 쿼리에서 용어 사이에 +를 추가합니다. API에 전송하는 쿼리는 다음과 같습니다.

search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true

이제 검색 서비스는 5개의 문서를 반환하지만, 최상위 결과는 여전히 예산 범주에 있습니다.

Lucene 쿼리 파서 사용

쿼리 문자열에 &queryType=full을(를) 추가하여 검색 탐색기에 Lucene 쿼리 파서 사용을 지시할 수 있습니다.

search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

Lucene 구문을 사용하면 보다 정확한 쿼리를 작성할 수 있습니다. 사용 가능한 기능에 대한 요약은 다음과 같습니다.

  • 부울 연산자: AND, OR, NOT(예: luxury AND 'air con').
  • 필드 검색: fieldName:search term(예: Description:luxury AND Tags:air con).
  • 유사 항목 검색: ~(예: Description:luxury~)는 럭셔리의 철자가 틀린 버전이 있는 결과를 반환합니다.
  • 용어 근접 검색: "term1 term2"~n(예: "indoor swimming pool"~3)는 서로 세 단어 내에 실내 수영장이라는 단어가 있는 문서를 반환합니다.
  • 정규식 검색: /regular expression// 사이의 정규식을 사용합니다. 예를 들어 /[mh]otel/은 호텔과 모텔이 있는 문서를 반환합니다.
  • 와일드카드 검색: *, ?. 여기서 *는 많은 문자를 일치시키고 ?는 단일 문자를 일치시킵니다. 예를 들어 'air con'*는 에어컨과 에어컨디셔닝을 찾게 됩니다.
  • 우선 순위 그룹화: (term AND (term OR term))(예: (Description:luxury OR Category:luxury) AND Tags:air?con*).
  • 용어 부스팅: ^(예: Description:luxury OR Category:luxury^3)는 범주가 럭셔리인 호텔에 설명에 럭셔리가 들어간 호텔보다 더 높은 점수로 제공합니다.

이러한 기능에 대한 자세한 내용은 Azure AI 검색의 Lucene 쿼리 구문을 참조하세요.

검색 용어 부스팅

위를 사용하여 결과를 향상시킬 수 있습니다. 파서는 럭셔리 카테고리의 호텔에 더 높은 우선 순위를 부여해야 합니다. 또한 태그 필드에서 보다 정밀하게 에어컨디셔닝을 찾을 수 있습니다.

(Description:luxury OR Category:luxury^3) AND Tags:'air con'*

다른 쿼리 문자열 매개 변수를 추가하면 다음의 쿼리 문자열을 가져옵니다.

search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full

현재 상위 3개 호텔은 다음과 같습니다.

{
  "@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
  "@odata.count": 5,
  "value": [
    {
      "@search.score": 5.3537707,
      "HotelId": "8",
      "HotelName": "Sapphire Resort",
      "Description": "Downtown, close to everything, steps to the park, shopping, and restaurants.",
      "Category": "Luxury",
      "Tags": [
        "free wifi",
        "continental breakfast",
        "air conditioning"
      ]
    },
    {
      "@search.score": 5.3522806,
      "HotelId": "49",
      "HotelName": "Old Carrabelle Hotel",
      "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
      "Category": "Luxury",
      "Tags": [
        "air conditioning",
        "laundry service",
        "24-hour front desk service"
      ]
    },
    {
      "@search.score": 4.1448884,
      "HotelId": "18",
      "HotelName": "Oceanside Resort",
      "Description": "New Luxury Hotel.  Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
      "Category": "Budget",
      "Tags": [
        "view",
        "laundry service",
        "air conditioning"
      ]
    },
    ...
  ]
}

Sapphire Resorts 검색 점수는 2.3321536에서 5.3537707로 증가했으며 이제 고객에게 표시되는 첫 번째 호텔입니다. Oceanside Resort는 이제 3위를 차지했습니다.