F3でこのような答えをどうやって使うのですか?全文検索とスコアソートMongoDB
php mongodb full-text search and sort
EDIT: 私はタイトルと説明で検索しています。 searchtermがない場合は、フィールドcreated_at
でソートされます。 がの場合は、最も関連性の高いものを並べ替えます。
編集:編集: また、ページ付けプラグインも使用しています。
F3でこのような答えをどうやって使うのですか?全文検索とスコアソートMongoDB
php mongodb full-text search and sort
EDIT: 私はタイトルと説明で検索しています。 searchtermがない場合は、フィールドcreated_at
でソートされます。 がの場合は、最も関連性の高いものを並べ替えます。
編集:編集: また、ページ付けプラグインも使用しています。
を、あなたができるようになりますscore
という名前の投影フィールドを定義し、ソートに使用します。
例えば:
// MongoDB instance
$db=new DB\Mongo('localhost:27017','mydb');
// Define a `score` field here
$fields=['score'=>['$meta'=>'textScore']];
// Mapper instance
$mapper=new DB\Mongo\Mapper($db,'mycollection',$fields);
// Search text and sort by score
$mapper->load(
['$text'=>['$search'=>'search text']],
['order'=>['score'=>['$meta'=>'textScore']]]
);
[Pagination](https://github.com/ikkez/F3-Sugar/tree/master-v3/Pagination)でこれを使う方法は? – anned20
さて、[docs](https://github.com/ikkez/F3-Sugar/tree/master-v3/Pagination#3-paginate-your-records)から引用されています: '$ subset = $ mapper-> paginate ($ page-1、$ limit、$ filter、$ options); '。あなたの場合、 '$ filter = ['$ search' => 'search text']]'と '$ options = ['order' => ['score' => ['$ meta' => 'textScore ']]] '。 – xfra35
ありがとう!私が家に帰るときに試してみる。期待しているようだ! – anned20
使用aggregation framework、スコアフィールドを投影し$project
オペレータのパイプラインが続く検索語と一致します$match
パイプライン動作を行うことにより、最も関連性の高いテキストスコアを有する文書を、得るために、その後、最も関連性の高い項目を返すには別の$order
パイプライン操作を実行します。 「textScore」metadataが、その後の予測、種類、および条件$text
操作が含ま$match
のステージのために提供されています:フレームワークのedgeバージョンを使用して
db.collection.aggregate([
{
"$match": {
"$text": {
"$search": "search text"
}
}
},
{
"$project": {
"_id": 0,
"score": {
"$meta": "textScore"
}
}
},
{
"$orderby": {
"score" : -1
}
}
])
あなたの答えをありがとう!私はこれのようにそれを使用する方法を知っています。私の質問は、どのように私はこれをFat Free Frameworkで使うのですか?あなたの助けをありがとう – anned20
はS.I @ –
...もう少し説明しよう。私はタイトルと説明で検索しています。 searchtermがなければ 'created_at'フィールドをソートします。もし_ **が** _ searchtermの場合は:最も関連性の高いものを並べ替えます。 – anned20
「最も関連性が高い」を定義します。スコアリングはどこでもまったく同じではありません。 –