2016-11-04 13 views
0

私はMongodbの集計メソッドをテキスト検索に対して使用しています。私はこれでいろいろ試してきましたが、結果をフィルタリングする正しい方法を見つけることができません。私はインデックスをセットアップしただけで、$ textの検索だけでうまく動作し、ちょうどクエリだけでうまく動作します。Mongodb - 検索クエリで集約テキスト検索を使用する方法

ここでテキスト検索を行うに私のコードです:

Model.aggregate([ 
    { $match: { $text: { $search: searchValue } } }, 
    { $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } }, 
    { $match: { score: { $gt: 1.0 } } } 
], function (err, models) { 

}) 

私はこのクエリによってさらにモデルをフィルタリングすることができるようにしたいしかし:

Model.find({_parentIds: {$in: arrayOfIds}}) 

私はこれが働くだろうと思っているだろう:

Model.aggregate([ 
    { $match: { $text: { $search: searchValue }, _parentIds: {$in: arrayOfIds} } }, 
    { $project: { displayTitle: 1, title: 1, body: 1, _type: 1, _id: 1, score: { $meta: "textScore" } } }, 
    { $match: { score: { $gt: 1.0 } } } 
]) 

しかし、悲しいことに、それはありません。誰かがこれを試したことがありますか?このようなものになるだろう

[{ 
    displayTitle: "first item", 
    title: "first_item", 
    _type: "item", 
    _parentIds: ["123", "234"] 
}, { 
    displayTitle: "second item", 
    title: "second_item", 
    _type: "item", 
    _parentIds: ["123", "234"] 
}, { 
    displayTitle: "third item", 
    title: "third_item", 
    _type: "item", 
    _parentIds: ["345", "456"] 
}] 

私の現在の検索:

searchValue = "item" 
arrayOfIds = ["345"]; 

と裏面のみ、この文書を期待されるだろう:

{ 
    displayTitle: "third item", 
    title: "third_item", 
    _type: "item", 
    _parentIds: ["345", "456"] 
} 
ここ

は私がを検索しています例集です

ありがとうございます!

+0

は、あなたがサンプル文書と予想される出力を追加してくださいことはできますか? – Veeram

+0

@Veeram - サンプルコレクションと予想出力を追加しました – darylhedley

答えて

1

テキストスコアは0.75です。したがって、一致フィルタを0.5より大きい値に変更すると動作します。

本文を除外する変更された投影、_idおよび親IDを含みます。

このクエリで作成されたインデックス。

db.textcol.createIndex({ displayTitle: "text" }) 

このクエリを実行しています。

db.textcol.aggregate([ 
    { $match: { $text: { $search: "item" }, _parentIds: {$in: ["345"]} }} , 
    { $project: { displayTitle: 1, title: 1, _type: 1, _id: 0, _parentIds :1, score: { $meta: "textScore" } }}, 
     { $match: { score: { $gt: 0.5 } } } 
]) 

出力:

{ 
    "displayTitle": "third item", 
    "title": "third_item", 
    "_type": "item", 
    "_parentIds": ["345", "456"], 
    "score": 0.75 
} 
+0

ありがとうございました!!!これは私を救った!だから私が実際に問題にしていたのは、私が望んでいない結果を返すことでした(_parentIds配列に_parentIdを持たないモデル)。上記の解決策はそれを修正し、その主な理由は、$ projectの_parentIds:1と_id:0で、スコアの$一致が高すぎました。 – darylhedley

関連する問題