ASP를 사용하여 검색 엔진 기능을 구현하는 것은 매우 편리하지만 3721과 유사한 지능형 검색을 구현하는 방법은 무엇입니까? 예를 들어, 검색 조건 상자에 "중국인"을 입력하면 "중국", "사람"과 같은 키워드가 자동으로 추출되어 데이터베이스에서 검색됩니다. 이 기사를 읽고 나면 이 기능을 구현하는 것이 매우 간단하다는 것을 알게 될 것입니다.
첫 번째 단계는 db_sample.mdb라는 데이터베이스를 만들고(이 문서에서는 Access2000 데이터베이스를 예로 사용함) 그 안에 T_Sample 테이블을 만드는 것입니다. 테이블 T_Sample에는 다음 필드가 포함됩니다.
ID 자동 번호 U_Name 텍스트 U_Info 설명
두 번째 단계에서는 Search.asp 검색 페이지 디자인을 시작합니다. 이 페이지에는 텍스트 상자와 제출 버튼이 포함된 양식(Frm_Search)이 포함되어 있습니다. 그리고 양식의 메소드 속성을 "get"으로 설정하고 작업 속성을 "Search.asp"로 설정합니다. 즉, 웹 페이지 자체에 제출합니다. 코드는 다음과 같습니다:
코드 조각은 다음과 같습니다.
<!-- 검색.asp -->
<양식 이름="frm_Search" method="get" action="Search.asp">
키워드를 입력해주세요:
<입력 유형="텍스트" 이름="키" 크기="10">
<입력 유형="제출" 값="검색">
</form>
다음으로 지능형 검색 구현의 핵심 부분으로 들어갑니다.
먼저 데이터베이스 연결을 설정합니다. Search.asp 시작 부분에 다음 코드를 추가합니다.
코드 조각은 다음과 같습니다.
<%
희미한 strProvider, CNN
strProvider="공급자=Microsoft.Jet.OLEDB.4.0;데이터 소스="
strProvider=strProvider & Server.MapPath("") & "datadb_Sample.mdb" 홈페이지 루트 디렉터리 아래의 data 디렉터리에 데이터베이스가 저장되어 있다고 가정합니다.
CNN = Server.CreateObject("ADODB.connection") 설정
CNN.Open strProvider는 데이터베이스 연결을 엽니다.
%>
다음으로 ASP 페이지에서 받은 데이터를 확인하고 데이터베이스에서 검색합니다.
코드 조각은 다음과 같습니다.
<font color="#FF0000">결과가 없습니다! ! ! </글꼴>
<%
또 다른
%>
"<font color="#FF0000"><%= S_Key %></font>"라는 이름의 항목을 검색하고, 총 <font color="#FF0000"><%= RST.RecordCount %></font >을 찾았습니다. 항목: <p>
<%
Not RST.EOF는 전체 레코드 세트를 순회하면서 검색된 정보를 표시하고 링크를 설정합니다.
%>
<!-- 필요한 링크 대상으로 설정할 수 있습니다-->
<font style="font: 12pt 宋体"><a href="info.asp?ID=<%= RST("ID") %>" target="_blank"><%= RST("U_Name") % ></a></글꼴>
<!--자세한 내용 보기-->
<font style="font: 9pt 宋体"><%= 왼쪽(RST("U_Info"),150) %></font><p>
<%
RST.이동다음
향하게 하다
RST.닫기
RST=아무것도 설정하지 않음
종료 조건
종료 조건
%>
위 코드에는 지능형 검색 구현의 핵심인 커스텀 기능인 AutoKey가 있습니다. 코드는 다음과 같습니다:
코드 조각은 다음과 같습니다.
<%
기능 AutoKey(strKey)
CONST lngSubKey=2
Dim lngLenKey, strNew1, strNew2, i, strSubKey
'문자열의 적법성을 확인하고, 그렇지 않은 경우 오류 페이지로 이동합니다. 필요에 따라 오류 페이지를 설정할 수 있습니다.
if InStr(strKey,"=")<>0 또는 InStr(strKey,"`")<>0 또는 InStr(strKey,"")<>0 또는 InStr(strKey," ")<>0 또는 InStr(strKey ," ")<>0 또는 InStr(strKey,"")<>0 또는 InStr(strKey,chr(34))<>0 또는 InStr(strKey,"")<>0 또는 InStr(strKey,", ")<>0 또는 InStr(strKey,"<")<>0 또는 InStr(strKey,">")<>0 다음
응답.리디렉션 "error.htm"
종료 조건
lngLenKey=렌(strKey)
케이스 선택 lngLenKey
사례 0 빈 문자열인 경우 오류 페이지로 이동
응답.리디렉션 "error.htm"
사례 1 길이가 1이면 값이 설정되지 않습니다.
strNew1=""
strNew2=""
'Case Else 길이가 1보다 큰 경우 문자열의 첫 번째 문자부터 시작하여 쿼리 조건으로 길이 2를 사용하여 하위 문자열을 반복합니다.
i=1의 경우 lngLenKey-(lngSubKey-1)로
strSubKey=Mid(strKey,i,lngSubKey)
strNew1=strNew1 & " 또는 U_Name like %" & strSubKey & "%"
strNew2=strNew2 & " 또는 %" & strSubKey & "%"와 같은 U_Info
다음
선택 종료
'전체 SQL 문 가져오기
AutoKey="U_Name like %" & strKey & "% 또는 U_Info like %" & strKey & "%" & strNew1 & strNew2인 T_Sample에서 * 선택
기능 종료
%>
지능형 검색을 구현하기 위해서는 검색 키워드를 자동으로 그룹화하는 것이 핵심입니다. 여기서는 길이가 2인 부분 문자열을 반복하는 방법을 사용합니다. 하위 문자열 길이를 1, 3, 4 등으로 설정하면 어떨까요? 하위 문자열 길이가 2(1)보다 작으면 키워드 그룹화 기능이 손실되고, 하위 문자열 길이가 2보다 크면 일부 구문이 손실되기 때문입니다. CONST lngSubKey=2를 다른 숫자로 변경해 보면 어느 것이 더 나은지 직접 확인할 수 있습니다.
마지막으로 리소스를 해제하려면 데이터 연결을 닫는 것을 잊지 마세요.
코드 조각은 다음과 같습니다.
<%
CNN.닫기
CNN=아무것도 설정하지 않음
%>
이 시점에서 지능형 검색 엔진이 완성되었습니다. 페이지 매기기, 강조 표시 및 기타 기능을 추가하는 등 계속해서 개선할 수도 있습니다. 좋아요, 모두의 시간을 낭비하지 않을 테니 가서 한번 시도해 보세요.