gpt4 book ai didi

php - Laravel 5 全文搜索

转载 作者:行者123 更新时间:2023-12-03 11:22:12 25 4
gpt4 key购买 nike

我有一个包含 first_name 和 last_name 字段的数据库表。我需要检查 Asiapay 提供的信用卡持有人姓名是否是我旅行团的一部分(记录在我的数据库表中)。问题是给出的信用卡持有人是全名(单字段)

到目前为止,我的选择是:

  • 使用全文搜索
  • 使用 https://github.com/atomescrochus/laravel-string-similarities 但不确定考虑正确的百分比

  • 我需要一些有关字符串比较的其他库和策略的建议

    PS:我只是无法比较连接的名字和姓氏与holder_name,因为在某些情况下旅行证件中的名字与某人信用卡中的名字不同(例如,护照中的 “John Foo Doe” vs “John Doe 760”在信用卡)

    最佳答案

    以下是您应该如何实现全文搜索

    首先在您的表格上创建全文搜索。

    // Full Text Index
    DB::statement('ALTER TABLE contacts ADD FULLTEXT fulltext_index (firstName, lastName, email)');

    然后在你的模型中
    $columns = 'firstName,lastName,email';
    $contacts = Contact::where('customer_id', $request->user()->customer_id)
    ->select(['id', 'firstName', 'lastName', 'email', 'phone', 'mobile', 'lastContacted', 'assignedTo', 'createdBy'])
    ->whereRaw("MATCH ({$columns}) AGAINST (? IN BOOLEAN MODE)", $this->fullTextWildcards($q))
    ->paginate(10);

    这是函数 fullTextWildcards用全文搜索通配符替换空格。
    protected function fullTextWildcards($term)
    {
    // removing symbols used by MySQL
    $reservedSymbols = ['-', '+', '<', '>', '@', '(', ')', '~'];
    $term = str_replace($reservedSymbols, '', $term);

    $words = explode(' ', $term);

    foreach ($words as $key => $word) {
    /*
    * applying + operator (required word) only big words
    * because smaller ones are not indexed by mysql
    */
    if (strlen($word) >= 3) {
    $words[$key] = '*' . $word . '*';
    }
    }

    $searchTerm = implode(' ', $words);

    return $searchTerm;
    }

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

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