【问题标题】:How can I write a fluent query for full text search?如何为全文搜索编写流畅的查询?
【发布时间】:2013-06-07 19:43:33
【问题描述】:

我需要在 Laravel 3.0 中为全文搜索编写一个流畅的查询。搜索查询是这样的

SELECT * FROM posts WHERE MATCH (tags) AGAINST ('Lorem Ipsum Dolor Sit Amet');

我一直在使用原始查询来执行此操作,但原始查询的结果无法分页。 谁能告诉我为这个查询写一个流畅的查询的正确方法吗?

【问题讨论】:

    标签: sql laravel full-text-search laravel-3


    【解决方案1】:

    也许试试这个....??

    public static function find_tags($searchtags, $take = 20)
    {
        $results = Posts::raw_where("match (`tags`) against (?)", array($searchtags))
            ->take($take)
            ->get();
    
        return $results;
    }
    

    或者只是……

      $searchtags = "Lorem ipsum blah";
      $results = Posts::raw_where("match (`tags`) against (?)", array($searchtags))
            ->paginate(10);
    

    我只是把它从空中拉出来,现在无法测试....不在我的服务器上...

    【讨论】:

    • 您好!你能告诉我为什么这不起作用吗? $results = Posts::raw_where("match (tags) 与 (?)", array($searchtags))->get();
    • 我以为是的??不是吗?还是只适用于 take() 和 paginate()....我看不到
    • 是的。它似乎不适用于 ->get(),甚至不适用于 ->all()。或者可能是查询的结果只是具有不同的结构,在视图中被弄乱了......我试图首先弄清楚这一点。没有相关的文档吗?我在任何地方都找不到它??
    • no ...由于某种原因,raw_where 是 laravel 中唯一未记录的东西...也许您不必 get() ...就像您执行 find() 时一样,它只是可用.....不知何故我怀疑它,但也许。
    • raw_where 不适合我。它抛出错误Call to undefined method Illuminate\Database\Query\Builder::raw_where() :( 有人吗?
    【解决方案2】:

    实际上,您不需要执行原始选择语句,只需将 where() 语句写入原始查询即可。那么你为什么不尝试这样的事情呢,我的本地服务器目前有一些问题,所以我不能自己测试,但这应该可以。

    // If you're using laravel models 
    Posts::where_raw(sprintf("MATCH (tags) AGAINST ('%s')", $search))->paginate(10);
    

    where_raw 是 laravel 未记录的函数之一:D,还请记住,当使用原始查询时,会执行转义,所以要小心。

    【讨论】:

    • 这没有成功。它实际上是在寻找一个名为“raw”的列并搜索“MATCH (tags) AGAINST (\'thought\')”
    • 这是我得到的错误消息: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'raw' in 'where clause' SQL: SELECT * FROM posts WHERE raw = ?绑定:数组 ( 0 => 'MATCH (tags) AGAINST (\'thought\')', )
    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多