Я пытаюсь найти текстовое поле в своей коллекции. Это пример документа в моей коллекции:
{ "_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 }
Любые идеи о том, почему я каждый раз получаю пустой массив результатов?
Заранее благодарю за любую помощь!
Натан
Вы не можете искать «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
– это показывает, что cat|purpl
также применяется для purple
.
У вас есть вложенные кавычки в вашем коде («строковый литерал»):
$search_results = $db->command(array('text' => 'trending', 'search' => '"the"'));
Попробуйте не вставлять цитаты
$search_results = $db->command(array('text' => 'trending', 'search' => 'the'));