gpt4 book ai didi

php - Laravel 4 中的 MySQL/PHP bool 全文搜索问题

转载 作者:行者123 更新时间:2023-11-30 01:25:55 27 4
gpt4 key购买 nike

我有以下代码,可以在 Laravel 4 中的模型中搜索搜索短语。它使用“IN BOOLEAN MODE”以及 MATCH() 和 AGAINST()。

public function scopeSearch($query, $q) 
{
$fields = Static::getFields();
$fields = implode(', ', $fields);

$query->whereRaw("MATCH(" . $fields . ") AGAINST('" . $q . "' IN BOOLEAN MODE)");
}

public static function getFields()
{
$field_names = array();
$disallowed = array('id', 'created_at', 'updated_at', 'deleted_at');

$columns = DB::select('SHOW COLUMNS FROM accounts');
foreach ($columns as $c) {
$field = $c->Field;
if ( ! in_array($field, $disallowed)) {
$field_names[$field] = $field;
}
}

return $field_names;
}

我希望帮助修改上面的代码,以允许用户使用部分单词和短语搜索字段。例如,如果用户输入 Purple,我希望搜索也能找到电子邮件地址中包含 Purple 一词的任何记录,例如 info@purplegriffon.com。因此,基本上是部分匹配。

我还希望能够在输入短语 john griffon 的字段中找到包含 griffon 的所有内容,即使 john 不存在。

有人可以帮我解决这个问题吗?干杯。

最佳答案

好的,我已经尽我所能使用全文搜索并使用通配符运算符来搜索部分内容。这可能不是最好的解决方案,但它确实有效。

public function scopeSearch($query, $q) 
{
$fields = Static::getFields();
$fields = implode(', ', $fields);
$terms = explode(' ', $q);

if (count($terms) > 1) {
$query->whereRaw("MATCH(" . $fields . ") AGAINST ('" . $q . "' IN BOOLEAN MODE)");
} else {
foreach ($terms as $term) {
$query->whereRaw("MATCH(" . $fields . ") AGAINST ('*" . $term . "*' IN BOOLEAN MODE)");
}
}
}

public static function getFields()
{
$field_names = array();
$disallowed = array('id', 'country_id', 'created_at', 'updated_at', 'deleted_at');

$columns = DB::select('SHOW COLUMNS FROM venues');
foreach ($columns as $c) {
$field = $c->Field;
if ( ! in_array($field, $disallowed)) {
$field_names[$field] = $field;
}
}

return $field_names;
}

如果有人可以简化或改进它,那么我很乐意看到它。干杯。

关于php - Laravel 4 中的 MySQL/PHP bool 全文搜索问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17991326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com