0

私がやりたいことは次のとおりです。

$collection = $this->db->products_sale;

        $user_query = preg_replace("/[[:blank:]]+/"," ", $data);
        $arr_query = explode(' ', $user_query);

        if (count($arr_query) > 1) {
        $tmp = array();

        foreach ($arr_query as $q) {
            $tmp[] = new MongoRegex( "/". $q ."/i" );
        }

        $who['keywords'] = array('$in' => $tmp);
        $who['title'] = array('$in' => $tmp);
        $who['description'] = array('$in' => $tmp);

        } else {
            $who['keywords'] = new MongoRegex( "/". $user_query ."/" );
            $who['title'] = new MongoRegex( "/". $user_query ."/" );
            $who['description'] = new MongoRegex( "/". $user_query ."/" );
        }

        print json_encode($who);
        $cursor = $collection->find( $who );

ご覧のとおり、私は多くの検索を行っていますが、やりたいことは次のとおりです。キーワード、タイトル、説明を検索できるようにする必要があります

今、私は自分がやっていると思っていた多くの検索を行うことができましたが、明らかにそうではありません. 私が得たものから、1つの長い文字列 ARRAY または JSON を mongoDB に送り返すようです。MySQL とは異なり、OR/AND 検索や MATCH 検索さえも実行できますが、MongoDB はそれほどスマートではないようです。

これは私が見つけたものですが、検索が検索する正確な方法を検索します。

キーワードの代わりに「windows phone 7」が検索されます。

$cursor = $collection->find( 
        array('$or' => array(
        array("keywords" => new MongoRegex( "/$user_query/i" )),
        array("product" => new MongoRegex( "/$user_query/i" )),
        array("description" => new MongoRegex( "/$user_query/i" )),
        )));
4

1 に答える 1

0

私がどのようにしてそれを機能させたかを知りたい人のために。とてもシンプルでした。私はまだそれに取り組んでいますが、ここに私がこれまでに持っているものがあります。

$collection = $this->db->products_sale;

    $user_query = preg_replace("/[[:blank:]]+/"," ", $data);
    $arr_query = explode(' ', $user_query);

    if (count($arr_query) > 1) {
    $tmp = array();

    foreach ($arr_query as $q) {
        $tmp[] = new MongoRegex( "/". $q ."/i" );
    }

    $who['keywords'] = array('$in' => $tmp);
    $who['product'] = array('$in' => $tmp);

    } else {
        $who['keywords'] = new MongoRegex( "/". $user_query ."/" );
        $who['product'] = new MongoRegex( "/". $user_query ."/" );
    }

    //print json_encode($who);
    $cursor = $collection->find( 
    array('$or' => array($who
    )));


    if ($cursor->count() > 0)
    {
    //print "found you";
    $test = array();
    // iterate through the results
    while( $cursor->hasNext() ) {   
        $test[] = ($cursor->getNext());
    }
    print json_encode($test);
于 2012-07-01T12:26:25.013 に答える