Webサイトを構築する際、上司からBaiduのような検索機能を実装してほしいと依頼されました。以前はASPであいまい検索やマッチングクエリを実装していました。とんでもない。インターネットを検索すると、インターネット上でいくつかの方法が提供されていることがわかりました。1 つはシソーラスを構築する方法、2 つ目は単語分割コンポーネントを使用する方法、そして 3 つ目は私が話している自動単語分割技術です。インテリジェントな単語分割ではなく、単語ごとに一致するだけです。最善の方法は、語彙を構築し、ユーザーの入力に基づいて拡張することですが、中小規模の Web サイトの場合、これは必要ない場合があります。
これは、私が話している 3 番目のタイプの単語分割検索です。コードは次のとおりです。その使用方法については説明しません。
<%
関数 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
終了機能
%>