ASP を使用して検索エンジン機能を実装するのは非常に便利ですが、3721 のようなインテリジェントな検索を実装するにはどうすればよいでしょうか?たとえば、検索条件ボックスに「中国人」と入力すると、「中国」や「人物」などのキーワードが自動的に抽出され、データベース内で検索されます。この記事を読むと、この関数の実装が非常に簡単であることがわかります。
最初の手順では、db_sample.mdb という名前のデータベース (この記事では例として Access2000 データベースを使用します) を作成し、その中にテーブル T_Sample を作成します。テーブル T_Sample には次のフィールドが含まれます。
ID 自動番号 U_Name テキスト U_Info 備考
2 番目のステップでは、検索ページ Search.asp のデザインを開始します。このページには、テキスト ボックスと送信ボタンを含むフォーム (Frm_Search) が含まれています。そして、フォームのメソッド属性を「get」に、アクション属性を「Search.asp」に設定します。つまり、Web ページ自体に送信します。コードは次のとおりです。
コードスニペットは次のとおりです。
<!-- Search.asp -->
<フォーム名="frm_Search" メソッド="get" action="Search.asp">
キーワードを入力してください:
<input type="text" name="key" size="10">
<input type="submit" value="search">
</form>
次に、インテリジェントな検索を実現するための重要な部分に入ります。
まず、データベース接続を確立します。 Search.asp の先頭に次のコードを追加します。
コードスニペットは次のとおりです。
<%
Dim strProvider、CNN
strProvider="プロバイダ=Microsoft.Jet.OLEDB.4.0;データ ソース="
strProvider=strProvider & Server.MapPath("") & "datadb_Sample.mdb" データベースはホームページのルート ディレクトリ下のデータ ディレクトリに格納されていると仮定します。
CNN = Server.CreateObject("ADODB.connection") を設定します。
CNN.Open strProvider はデータベース接続を開きます
%>
次に、ASP ページが受信したデータを特定し、データベース内で検索します。
コードスニペットは次のとおりです。
<font color="#FF0000">結果が見つかりませんでした。 ! ! </font>
<%
それ以外
%>
「<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>
<!--詳細を表示-->
<font style="font: 9pt 宋体"><%= Left(RST("U_Info"),150) %></font><p>
<%
RST.MoveNext
ウェン
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=Len(strKey)
大文字と小文字の lngLenKey を選択してください
Case 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 & " または U_Info like %" & strSubKey & "%"
次
エンドセレクト
'完全な SQL ステートメントを取得
AutoKey="Select * from T_Sample where U_Name like %" & strKey & "% or U_Info like %" & strKey & "%" & strNew1 & strNew2
終了機能
%>
インテリジェントな検索を実現するには、検索キーワードを自動的にグループ化することが重要です。ここでは、長さ 2 の部分文字列をループする方法を使用します。部分文字列の長さを 1、3、4 などに設定してはどうでしょうか?これは、部分文字列長が 1 である 2 未満の場合、キーワードをグループ化する機能が失われ、部分文字列長が 2 を超える場合、一部のフレーズが失われるためです。 CONST lngSubKey=2 を他の数値に変更してみると、どれがより良いかがわかります。
最後に、データ接続を閉じてリソースを解放することを忘れないでください。
コードスニペットは次のとおりです。
<%
CNN.閉じる
CNN=何も設定しない
%>
この時点で、このインテリジェントな検索エンジンが完成しました。ページネーション、ハイライト、その他の機能の追加など、改良を続けることもできます。わかりました、皆さんの時間を無駄にするつもりはありません。行って試してみましょう。