PGSearch Gem -- 是否可以通过 :against 元素 group/weight?
PGSearch Gem -- is it possible to group/weight by the :against elements?
我正在使用 PG 搜索来允许用户输入查询并搜索模型上的几个不同属性。我有以下型号;
class Movie < ApplicationRecord
include PgSearch::Model
pg_search_scope :search_for,
against: { title: 'A', short_description: 'B', long_description: 'C' },
using: { tsearch: { prefix: true } }
end
这意味着你可以做类似的事情;
Movie.search_for("person")
并且它会找到标题中包含单词 person、short_description 和详细描述的结果。但是,它似乎没有以任何逻辑方式分组。结果感觉非常随机。
最终我希望它按反对散列进行分组。因此首先是标题,然后是简短描述,然后是详细描述。意思是所有标题中有“person”的标题都在列表的顶部,然后是 short_description,然后是长描述,而那些有多个查询的标题排名更高。所以如果查询在标题和简短描述中,它将位于标题中的上方。
或者如果它在简短描述中出现了 10 次但根本没有出现在标题中.. 标题中带有它的应该仍然更高.. 某种加权系统?
如何做到这一点?
谢谢!
您的代码示例按反对元素加权,标题第一,short_description 第二,等等。
您应该考虑实施 ranked_by 以进一步将结果调整为您想要的输出。
pg_search_rank
方法对调试特别有帮助。
我正在使用 PG 搜索来允许用户输入查询并搜索模型上的几个不同属性。我有以下型号;
class Movie < ApplicationRecord
include PgSearch::Model
pg_search_scope :search_for,
against: { title: 'A', short_description: 'B', long_description: 'C' },
using: { tsearch: { prefix: true } }
end
这意味着你可以做类似的事情;
Movie.search_for("person")
并且它会找到标题中包含单词 person、short_description 和详细描述的结果。但是,它似乎没有以任何逻辑方式分组。结果感觉非常随机。
最终我希望它按反对散列进行分组。因此首先是标题,然后是简短描述,然后是详细描述。意思是所有标题中有“person”的标题都在列表的顶部,然后是 short_description,然后是长描述,而那些有多个查询的标题排名更高。所以如果查询在标题和简短描述中,它将位于标题中的上方。
或者如果它在简短描述中出现了 10 次但根本没有出现在标题中.. 标题中带有它的应该仍然更高.. 某种加权系统?
如何做到这一点?
谢谢!
您的代码示例按反对元素加权,标题第一,short_description 第二,等等。
您应该考虑实施 ranked_by 以进一步将结果调整为您想要的输出。
pg_search_rank
方法对调试特别有帮助。