프로그래밍 방식으로 WDS 호출

참고

Windows Desktop Search 2.x는 원래 Windows XP 및 Windows Server 2003용 추가 기능으로 사용할 수 있었던 사용되지 않는 기술입니다. 이후 릴리스에서는 Windows Search 를 대신 사용합니다.

Microsoft WDS(Windows Desktop Search) 2.x는 ISearchDesktop 인터페이스의 ExecuteQueryExecuteSQLQuery 메서드를 사용하여 프로그래밍 방식으로 쿼리할 수 있습니다. ExecuteQuery 메서드는 매개 변수로 전달된 쿼리 텍스트, 열 및 제한 사항에 따라 인덱스에서 레코드 집합을 반환합니다. ExecuteSQLQuery 메서드는 레코드 결과 집합도 반환하지만 정확한 구조적 쿼리 언어(SQL) 명령을 전달해야 합니다. ExecuteQuery 는 대부분의 시나리오에서 사용해야 합니다.

일반 쿼리

일반 쿼리는 모든 고급 쿼리 구문을 포함하여 사용자가 WDS 입력 상자에 입력한 쿼리입니다. 쿼리는 반환할 WDS 2.x 스키마 열, 결과를 정렬할 열 및 순서 및 결과를 제한할 절과 함께 ExecuteQuery에 전달됩니다.

메서드의 형식은 다음과 같습니다.

HRESULT ExecuteQuery(LPCWSTR lpcwstrQuery, LPCWSTR lpcwstrColumn, LPCWSTR lpcwstrSort, LPCWSTR lpcwstrRestriction, Recordset **ppiRs);

Direction 변수 설명
In(다음 안에) lpcwstrQuery 쿼리 텍스트입니다. 이 쿼리는 Windows 데스크톱 검색 사용자 인터페이스의 검색 텍스트 상자에 입력된 쿼리와 동일합니다.
예: "from:Zara dinner plans"
In(다음 안에) lpcwstrColumn 포함할 열이며 쉼표로 구분됩니다.
예: "DocTitle, Url"
In(다음 안에) lpcwstrSort 정렬할 열 재정의 뒤에 오름차순으로 ASC 또는 내림차순으로 DESC가 옵니다.
예: "LastAuthor DESC"
In(다음 안에) lpcwstrRestriction Windows 데스크톱 검색 선택에서 WHERE 절을 통해 추가하기 위한 제한 사항입니다.
예: "Contains(LastAuthor, 'Bill')"
아웃 ppiR 결과 레코드 집합

SQL 쿼리

ISearchDesktop.ExecuteSQLQuery 메서드는 직접 WDS 데이터베이스 쿼리를 보내는 데 사용됩니다. 쿼리 구문은 Monarch 스타일 SQL GROUP BY 절을 사용하는 기능과 함께 SharePoint Server에 사용되는 구문과 유사합니다. 쿼리는 ExecuteQuery API와 마찬가지로 고급 쿼리 구문을 추가로 처리하지 않고 전달되는 것과 똑같이 인덱스에 대해 실행됩니다.

메서드의 형식은 다음과 같습니다.

HRESULT ExecuteSQLQuery(LPCWSTR lpcwstrSQL, Recordset **ppiRs);

Direction 변수 설명
In(다음 안에) lpcwstrSQL WDS 인덱스에 대해 실행할 SQL 쿼리
아웃 ppiR 결과 레코드 집합

샘플 C++ 코드

참고

이 코드 및 정보는 특정 목적에 대한 상품성 및/또는 적합성에 대한 묵시적 보증을 포함하지만 이에 국한되지 않고 표현되거나 암시된 어떠한 종류의 보증도 없이 "있는 그대로" 제공됩니다.

Copyright (C) Microsoft. All rights reserved.

#include <stdio.h>
#include <wchar.h>
#include <windows.h>
#include <msnldl.h>
#include <adoint.h>
#include <adoguids.h>
 
HRESULT TestExecuteQuery(ISearchDesktop *psd)
{
ADORecordset *prs = NULL;
 
    HRESULT hr;
 
    hr = psd->ExecuteQuery( L"ToName:Moishe", 
                            L"DocTitle,DocFormat", 
                            L"PrimaryDate DESC", 
                            L"Contains('text')", 
                            &prs);
    if (SUCCEEDED(hr))
        prs->Release();
    return hr;
}
 
HRESULT TestExecuteSQLQuery(ISearchDesktop *psd)
{
    ADORecordset *prs = NULL;
    HRESULT hr;

    hr = psd->ExecuteSQLQuery(L"select DocTitle from MyIndex..Scope() where contains('text')", &prs);

    if (SUCCEEDED(hr))
      prs->Release();
    return hr;
}
 
extern "C" int __cdecl wmain( int argc, WCHAR * argv[] )
{
    SCODE sc = CoInitialize(0);
    ISearchDesktop *psd = NULL;
    HRESULT         hr;
     
    if (SUCCEEDED(hr = CoCreateInstance(__uuidof(SearchDesktop), NULL, CLSCTX_INPROC_SERVER, 
                                        __uuidof(ISearchDesktop), (void**)&psd)))
          {
             TestExecuteSQLQuery(psd);
             TestExecuteQuery(psd);
             psd->Release();
          }
          CoUninitialize();
}

참조

고급 쿼리 구문

인식된 형식

웹 페이지에서 WDS 호출