我使用mongodb構建了一個基本的搜索引擎,我已經驗證了基本查詢在mongo shell中的工作。雖然我不太瞭解如何將其轉換爲PHP。將mongo查詢翻譯成php mongo
輸入字符串中的空格表示'和'運算符和|或管道字符是'或'運算符。 輸入查詢的變化,但可能是沿着這些路線的東西(減去引號!):
'o g|ra'
這將相當於寫:
(o&&g)||(ra)
基本蒙戈查詢(請注意,我不是試圖每次都翻譯這個確切的查詢,我需要它在$ ands和$ ors的數量上是靈活的)。已經測試了這一點,它工作正常:
db.scores.find({$or:[{Title:/o/i, Title: /g/i},{Title:/ra/i}])
我在PHP中已經產生的代碼是這樣的:
if(strstr($textInput, '|') != FALSE)
{
foreach($orArray as $item)
{
$itemMod = explode(" " , $item);
array_push($stringArray, $itemMod);
}
$masterAndQueryStack = array();
foreach ($stringArray as $varg)
{
$multiAndQuerySet = array();
foreach ($varg as $obj)
{
$searchText = '/'. $obj .'/i';
$regexObj = new MongoRegex($searchText) ;
$singleQuery = array('Title' => $regexObj);
array_push($multiAndQuerySet , $singleQuery);
}
array_push($masterAndQueryStack , $multiAndQuerySet);
}
$orAndQueryStack = array('$or' => $masterAndQueryStack);
return $orAndQueryStack ;
}
這是一個已經被PHP代碼返回的查詢,你可以看到這些和術語已經被放入一個數組中。我看不到任何存儲這些數據的方式,而不把它們推送到一個數組,但是似乎mongodb的$或者不喜歡接受一個數組,我只是不確定如何重新使用搜索算法來解決這個問題。
Array
(
[$or] => Array
(
[0] => Array
(
[0] => Array ([Title] => MongoRegex Object ([regex] => o [flags] => i))
[1] => Array ([Title] => MongoRegex Object ([regex] => g [flags] => i))
)
[1] => Array
(
[0] => Array ([Title] => MongoRegex Object ([regex] => ra [flags] => i))
)
)
)
您可以翻轉第一個$和正則表達式來使用組來檢測$和或者您可以使用實際的$和操作符。 – Sammaye 2012-08-08 11:09:29