我正在尝试在我的应用程序中实现最相关的搜索。
我有一个搜索页面,可以使用搜索输入字段搜索客户。输入字段与数据库中的某些字段匹配。我有以下数据库结构。
顾客
电子邮件,状态
场地
名称,弹头,状态
字段值(字段表包含姓名、地址、电话号码等字段)
客户 ID、字段 ID、值
我只是从搜索页面获取输入值并匹配字段值表中的值,例如:
全名、名称、地址等。
对于每次匹配,我都增加了一个重量参数,稍后我会按重量排序。这是代码。
搜索关键字数组:
$keyword = $request->get('keyword');
/**
* Split key into string array
*/
$keys = explode(' ', $keyword);
$searchItems = [];
foreach ($keys as $key){
$key = str_replace(' ','', $key);
$key = preg_replace('/[^a-zA-Z0-9_]/', '', $key);
if($key){
$searchItems[] = $key;
}
}
$keys = $searchItems;
在这个函数中,$keys参数和上面解释的一样,$customerIds是所有客户$fieldIds的id,是用于搜索的字段的id。
此函数在搜索后以最相关的顺序返回所有客户 ID 的数组。后来我使用这个数组来获取所有客户并使用自定义长度感知分页器进行分页。
我面临的问题是它需要很长时间,并且在我加载每个页面时分页后需要很长时间。有没有办法只执行一次此代码并在多个页面上对搜索结果进行分页,以便在第一种情况下需要很长时间,而在加载第二个、第三个……页面时会更快。
Helenr