PHP redisearch的使用

500 阅读1分钟

 

 下载PHP redisearch github.com/MacFJA/php-…

composer require macfja/redisearch

这个客户端支持redis扩展 ,predis等

我这里命令执行创建索引

ft.CREATE userIdx ON HASH PREFIX 1 {user}:id: SCHEMA city TEXT id NUMERIC nickname TEXT mobile TEXT address GEO status TAG  dispatch_status TAG SORTABLE NOINDEX push_token text

初始化客户端

$clientFacade = new \MacFJA\RediSearch\Redis\Client\ClientFacade();

// With Predis
$client = $clientFacade->getClient(new \Predis\Client(/* ... */));

// With Phpredis extension
$client = $clientFacade->getClient(new \Redis([/* ... */]));

// With Phpiredis extension
$client = $clientFacade->getClient(phpiredis_connect($host));

// With Amp\Redis
$client = $clientFacade->getClient(new \Amp\Redis\Redis(new RemoteExecutor(Config::fromUri(/* ... */))));

// With Cheprasov
$client = $clientFacade->getClient(new \RedisClient\Client\Version\RedisClient6x0([/* ... */]));

// With Rediska
$client = $clientFacade->getClient(new \Rediska(['servers' => [[/* ... */]]]));

// With Redisent
$client = $clientFacade->getClient(new \redisent\Redis(/* ... */));

// With TinyRedisClient
$client = $clientFacade->getClient(new \TinyRedisClient(/* ... */));

// With Credis
$client = $clientFacade->getClient(new \Credis_Client(/* ... */));

实例search

// redisearch 搜索器实例
$search = new \MacFJA\RediSearch\Redis\Command\Search();
$queryBuilder = new \MacFJA\RediSearch\Query\Builder();

范围查找

$queryBuilder->addGeoFacet('address', 经度, 纬度, 范围,\MacFJA\RediSearch\Redis\Command\SearchCommand\GeoFilterOption::UNIT_KILOMETERS);

不查找某些tag

$queryBuilder->addElement(
 new Negation(
 new TagFacet(['id'],...$notSearchUsers)  // 我这里$notSearchUsers 是一个数组 , 所以展开
));

 查找数字大于

 $queryBuilder->addElement(NumericFacet::greaterThan('age', 17))

执行查询

$query = $queryBuilder->render();
$search->setIndex("userIdx"); // 我这里的索引名
$search->setLimit(0,100);  // 查找固定数量
$search->setReturn('id','mobile'); // 设置返回值

$search->setQuery($query); // 设置查询语句
$results = $client->execute($search); // 执行语句
$results->setClient($client);

查询结果转数组

        foreach ($results as $pageIndex => $pageContent) {
           
            foreach ($pageContent as $key => $val) {
                $fields = $val->getFields();
                $users[] = $fields;
            }
        }