Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails pg_搜索:“多搜索”结果的排序_Ruby On Rails_Pg Search - Fatal编程技术网

Ruby on rails pg_搜索:“多搜索”结果的排序

Ruby on rails pg_搜索:“多搜索”结果的排序,ruby-on-rails,pg-search,Ruby On Rails,Pg Search,我正在使用Rails 4.2.4和pg_search 1.0.5 class Advert < ActiveRecord::Base include PgSearch multisearchable :against => [:title, :body] end 但相反的顺序:desc产生相同的结果: > @pgs = PgSearch.multisearch('55948189').order(created_at: :desc) PgSearch::Docu

我正在使用Rails 4.2.4和pg_search 1.0.5

class Advert < ActiveRecord::Base

  include PgSearch
  multisearchable :against => [:title, :body]

end
但相反的顺序:desc产生相同的结果:

> @pgs = PgSearch.multisearch('55948189').order(created_at: :desc)

PgSearch::Document Load (108.4ms)  SELECT "pg_search_documents".* FROM "pg_search_documents" INNER JOIN (SELECT "pg_search_documents"."id" AS pg_search_id, (ts_rank((to_tsvector('simple', coalesce("pg_search_documents"."content"::text, ''))), (to_tsquery('simple', ''' ' || '55948189' || ' ''')), 0)) AS rank FROM "pg_search_documents" WHERE (((to_tsvector('simple', coalesce("pg_search_documents"."content"::text, ''))) @@ (to_tsquery('simple', ''' ' || '55948189' || ' '''))))) AS pg_search_ce9b9dd18c5c0023f2116f ON "pg_search_documents"."id" = pg_search_ce9b9dd18c5c0023f2116f.pg_search_id  ORDER BY pg_search_ce9b9dd18c5c0023f2116f.rank DESC, "pg_search_documents"."id" ASC, "pg_search_documents"."created_at" DESC
=> #<ActiveRecord::Relation [

#<PgSearch::Document id: 3148, content: "Aleksandra | Tallinn | 55948189 Simpatichnaja i se...", searchable_id: 3148, searchable_type: "Advert", created_at: "2015-10-01 11:44:06", updated_at: "2015-10-01 11:44:30">, 
#<PgSearch::Document id: 3275, content: "Aleksandra | Tallinn | 55948189 Simpatichnaja i se...", searchable_id: 3275, searchable_type: "Advert", created_at: "2015-10-02 11:05:49", updated_at: "2015-10-02 11:28:48">]>
有人能解释一下我是如何按照:created_at date排序搜索结果的吗

更新1:是否有可能结果的顺序是由PGU搜索确定的,并且没有任何方法按“created_at”排序


我现在正在更仔细地阅读文档,发现这样一句话:默认情况下,pg_搜索根据可搜索文本和查询之间的:t搜索相似性对结果进行排序。要使用不同的排名算法,可以将:ranked_by选项传递给pg_search_范围。请参见

有一个简单的答案,但它不适用于多搜索

首先,我需要从适用于多个模型的multisearchable更改为只在单个模型中进行pg_search_scope搜索

其次,我需要使用:order_in_rank。由于结果都是搜索词的100%匹配,因此根据pg_搜索,它们具有相同的排名:排名中的排名给出了作为平局决胜者的第二排名

class Advert < ActiveRecord::Base

  include PgSearch
  pg_search_scope :search_by_full_advert, 
                  :against => [:title, :body],
                  :order_within_rank => "adverts.created_at DESC"

end

我参加聚会可能晚了5年,但我只是偶然发现了同样的问题,并想出了如何做到这一点

简短的简单回答-将您的查询,即PgSearch.multisearch'55948189'转换为数组

我的例子是: @results=PgSearch.multisearchparams[:主搜索][:查询] 虽然您不能对@results进行分组或排序,但您可以使用@results.to_a进行分组或排序

在我的例子中,我有两个模型-产品和制造商生产的产品,我想首先在搜索结果中显示所有产品结果,然后才显示所有制造商的结果

首先,定义要排序的数组:

sorting_order = ["Manufacturer", "Product"]
然后


注意:serachable_type是gem迁移生成的PgSearch::Document的默认列

如果您只需要单一类型的集合,那么使用搜索范围是有意义的。那么你为什么要使用multisearch?@D-side:当我开始这个项目时,我想我需要搜索多个模型。但由于我只搜索一个模型,搜索范围是一个很好的解决方案。
sorting_order = ["Manufacturer", "Product"]
@results.to_a.sort_by { |x| sorting_order.index x.searchable_type }