0


1

数式に基づいてRubyで配列をどのようにソートしますか(例: 検索ランキング)?

そのため、最初のRailsアプリで迅速でダーティな検索機能を構築しています。 クエリを実行し、オブジェクトのリストを返しています。 e.g.

@articles = Article.find_by_sql("select * from article where title like "%test%" or title like "%foobar%")

そのため、記事コレクションは多くのデータを返しますが、その一部は他の検索用語よりも私の検索用語によく一致しています。 一致するアイテムが最初に表示されるように配列を並べ替えます。

これが、私が実装しようとしている概念的な擬似コードです。

for each article in @articles
    calculate the article score based on how many times the search terms appear
sort the array of articles based on the score

(「スコア」は記事オブジェクトの一部ではありません。)

これをソートする方法についてのアイデアはありますか?

2 Answer


2


他のすべてが失敗した場合は、次のことができます。

@articles.sort! {|x,y| search_fitness_function(y) <=> search_fitness_function(x)}


1


使用しているデータベースによっては、そこでランキングを完了する方が効率的かもしれません。 たとえば、MySQLでは、自然言語全文検索を使用できます。

_ デフォルトまたはIN NATURAL LANGUAGE MODE修飾子を使用すると、MATCH()関数はテキストコレクションに対して文字列の自然言語検索を実行します。 コレクションは、FULLTEXTインデックスに含まれる1つ以上の列のセットです。 検索文字列は、AGAINST()の引数として指定されます。 テーブル内の各行に対して、MATCH()は関連性の値を返します。つまり、検索文字列と、MATCH()リストで指定された列にあるその行のテキストとの類似性の尺度です。 _