0

コレクション内のテキスト フィールドを検索しようとしています。これは私のコレクションのサンプル ドキュメントです。

{
    "_id" : ObjectId("51f9c432573906141dbc9996"),
    "id" : ObjectId("51f9c432573906141dbc9995"),
    "body" : "the",
    "rank" : 0,
    "num_comm" : 0,
    "activity" : 1375323186
}

こんな感じで探してます…

$mongo = new MongoClient("mongodb://127.0.0.1");
$db = $mongo->requestry;

try
{
    $search_results = $db->command(array('text' => 'trending', 'search' => '"the"'));
}
catch (MongoCursorException $e)
{
    return array('error' => true, 'msg' => $e->getCode());
}

return array('error' => false, 'results' => $search_results);

そして、これは私が得た結果です...

{
    error: false,
    results: {
        queryDebugString: "||||the||",
        language: "english",
        results: [ ],
        stats: {
            nscanned: 0,
            nscannedObjects: 0,
            n: 0,
            nfound: 0,
            timeMicros: 66
        },
        ok: 1
    }
}

以下はコレクションの私のインデックスです...

{
    "v" : 1,
    "key" : {
        "_id" : 1
    },
    "ns" : "requestry.trending",
    "name" : "_id_"
},
{
    "v" : 1,
    "key" : {
        "_fts" : "text",
        "_ftsx" : 1
    },
    "ns" : "requestry.trending",
    "name" : "body_text",
    "weights" : {
        "body" : 1
    },
    "default_language" : "english",
    "language_override" : "language",
    "textIndexVersion" : 1
}

毎回空白の結果配列を取得する理由についてのアイデアはありますか?

助けてくれてありがとう!

ネイサン

4

2 に答える 2

1

「the」はストップ ワードであり、ストップ ワードは索引付けされていないため、検索できません。ストップワードのリストは、https://github.com/mongodb/mongo/blob/master/src/mongo/db/fts/stop_words_english.txtにあります。

デバッグ文字列で何が一致しようとしているのかを実際に確認できます。

queryDebugString: "||||the||"

ここでは最初の要素が空です。つまり、一致は行われません。で何が起こるかを見る'"cat" AND "purple"'と、デバッグ文字列は次のとおりです。

queryDebugString: "cat|purpl||||cat|purple||"

最初の要素は現在cat|purpl- これは、ステミングが にも適用されていることを示していpurpleます。

于 2013-08-01T09:55:36.483 に答える
0

コードに引用符がネストされています (「the」文字列リテラル):

$search_results = $db->command(array('text' => 'trending', 'search' => '"the"'));

引用符を入れ子にしないでください

$search_results = $db->command(array('text' => 'trending', 'search' => 'the'));
于 2013-08-01T03:50:30.527 に答える