0

私は自分の会社のエージェント用に単純なケース管理システムを構築していますが、Google や (最近では) ウィキペディアのように、なんらかの形式の検索提案機能を実装するとよいと思いました。

それで、ここに状況と質問があります:

次の列を持つテーブル(または、ビュー)があります。

1. Firstname,
2. Lastname,
3. Phone,
4. Category
5. Owner,
6. Status,
7. Creator

(For our sanities sake lets assume every column is of type text or (n)varchar or 
any other representation of a 'string')

もちろん、単純に各列を検索して結果を表示することもできますが、スクリプトには、どの結果 (または「提案」) がユーザーにとって最も関連性が高いかを知る方法がありません。

では、サーバーの観点からライブ検索を実際に実装するにはどうすればよいでしょうか。

もちろん、SQL 経由で検索を実行したいのですが、ストアド プロシージャを使用できないため、おそらく可能ではありますが、かなり制限されています。

編集: (明確化のため):列を検索し、ユーザーが検索したものに最も近く、最も関連性の高い結果を返したい (Google と同様)。できれば SQL を使用しますが、十分に高速であれば PHP を使用することもできます。

4

1 に答える 1

1

まず、リクエストを渡すことができるURLが必要です。他のリソースをできるだけ少なくロードすることが重要です。クエリを実行して応答を返すだけなので、フレームワークの大部分をブートストラップすることは避けたほうがよいでしょう(フレームワークを使用している場合)。検索ヒントのリクエストを迅速に行う必要があるため、これは重要です。

したがって、URLはexample.com/search/searchtermまたはになりexample.com/search?searchterm=searchtermます。

そのURLは、検索語を読み取って検索を実行するスクリプトにルーティングする必要があります。MySQLデータベース、SOLRサーバー、またはその他のものを使用しているかどうかは、実際には重要ではありません(コードに関しては、MySQLは全文検索用に最適化されていませんが、それはまったく別のトピックです)

searchtermの結果は、JSONエンコードされた文字列として返される可能性があります。これはjavascriptで簡単に処理できます(問題のクライアント側の実装ではjavascriptを使用すると思います)

MySQLの方法は次のようになります。

search.php

$searchTerm = real_escape_string($_GET['searchterm']);

$sql = "SELECT `lastname` FROM `tablename` WHERE `lastname` LIKE '%" . $searchTerm . "%'";

//Use the result of the query to build a piece of HTML OR return a JSON encoded array and build the HTML client side.
$output = ....

header('Content-type: application/json');
echo PBJSON::encode($output);

編集:

ハネスからの実際の質問を理解した後、レーベンシュタインを使用して、見つかった列のどれが最適であるかを確認することを提案しました。この関数は、2つの文字列の違いをチェックし、それを返します。これを使用すると、どの列が最も一致しているかを確認し、この情報を使用して何を返すかを決定できます。

于 2011-09-02T07:50:50.603 に答える