0

我正在为我公司的代理构建一个简单的案例管理系统,我认为实现某种形式的搜索建议事物会很好,就像谷歌或(最近的)维基百科一样。

所以,这是情况,还有一个问题:

我有一个包含以下列的表(或者更确切地说是一个视图):

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 完成搜索,但我不能使用存储过程,所以尽管可能有可能,但它相当有限。

编辑:( 澄清):我想搜索我的列并返回与用户搜索内容最接近且最相关的结果(类似于谷歌所做的)。最好通过 SQL,但如果 PHP 速度相当快,则可以使用 PHP。

4

1 回答 1

1

首先,您需要一个可以向其传递请求的 url。尽可能少地加载其他资源很重要。由于您只会执行查询并返回响应,因此最好避免引导框架的大部分(如果您正在使用框架)。这很重要,因为您希望搜索提示请求快速。

所以网址是example.com/search/searchtermor example.com/search?searchterm=searchterm

该 url 应该路由到一个脚本,您可以在该脚本中读出搜索词并对其执行搜索。无论您使用的是 MySQL 数据库、SOLR 服务器还是其他东西都无关紧要(代码方面,即 MySQL 并未针对全文搜索进行优化,但那是另一个主题)

searchterm 的结果可以作为 JSON 编码字符串返回。这很容易在 javascript 中处理(我想您的问题的客户端实现将使用 javascript)

MySQL的方式可能是这样的:

搜索.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);

编辑:

在了解了 Hannes 的实际问题后,我建议使用levenshtein检查找到的哪些列是最佳匹配。此函数检查两个字符串之间的差异并返回它。使用它,您可以查看哪些列是最接近的匹配项,并使用此信息来决定您将返回什么。

于 2011-09-02T07:50:50.603 回答