divineomega / omega-search
搜索功能使您能够轻松地将智能搜索引擎添加到您的网站或Web应用程序中。
v4.1.0
2020-03-05 12:02 UTC
Requires
- ext-pdo: *
- divineomega/uxdm: ^3.5.4
- illuminate/support: >=5.1
- psr/cache: ^1.0
README
Omega Search使您能够轻松地将智能搜索引擎添加到您的网站或Web应用程序中。它可以配置为搜索任何数据库表。
如果您正在使用Laravel框架,请查看Laravel Omega Search包。
安装
您可以使用Composer安装此包。
composer require divineomega/omega-search
使用方法
使用Omega Search非常简单。以下是一个示例。
use \DivineOmega\OmegaSearch\OmegaSearch; // Setup your database connection. // If you already have a connection setup, you can skip this step. $pdo = new PDO('mysql:dbname=database_name;host=127.0.0.1', 'username', 'password'); // Create a new Omega Search object $search = new OmegaSearch; // Configure the Omega Search object $search->setDatabaseConnection($pdo) ->setTable('products') ->setPrimaryKey('product_groupid') ->setFieldsToSearch(['product_name', 'product_description', 'product_seokeywords']) ->setConditions(['product_live' => 1]); // Perform a search for 'test product', limited to top 10 results $results = $search->query('test product', 10); // Output results var_dump($results);
结果以SearchResults
对象返回,如下所示,包含一个包含SearchResult
对象的数组。此SearchResults
对象还包含各种统计数据,例如最高、最低和平均相关性以及搜索所需的时间。
数组中的每个SearchResult
对象都提供主键id
和其relevance
。相关性是一个简单的数字,在更相关的结果上更高。数组按相关性降序排序。
object(DivineOmega\OmegaSearch\SearchResults)#731 (5) { ["results"]=> array(10) { [0]=> object(DivineOmega\OmegaSearch\SearchResult)#588 (2) { ["id"]=> int(80) ["relevance"]=> float(637.80198499153) } /** ... snipped ... */ [9]=> object(DivineOmega\OmegaSearch\SearchResult)#597 (2) { ["id"]=> int(18469) ["relevance"]=> float(121.65783596237) } } ["highestRelevance"]=> float(637.80198499153) ["lowestRelevance"]=> float(121.65783596237) ["averageRelevance"]=> float(336.74613218217) ["time"]=> float(0.33661985397339) }
覆盖SQL
如果您想编写自己的SQL查询而不是使用生成的查询,例如,如果您想连接另一个表,您可以使用setSqlOverride
方法。传递给此方法的查询必须包含一个SELECT
和LIMIT ? , ?
,否则将抛出异常。在覆盖SQL时可以省略setFieldsToSearch
方法。
以下是一个示例
use \DivineOmega\OmegaSearch\OmegaSearch; // Setup your database connection. // If you already have a connection setup, you can skip this step. $pdo = new PDO('mysql:dbname=database_name;host=127.0.0.1', 'username', 'password'); // Create a new Omega Search object $search = new OmegaSearch; // Configure the Omega Search object $search->setDatabaseConnection($pdo) ->setTable('products') ->setPrimaryKey('product_groupid') ->setConditions(['product_live' => 1]) ->setSqlOverride('SELECT product_name, product_description, product_seokeywords FROM products LIMIT ? , ?'); // Perform a search for 'test product', limited to top 10 results $results = $search->query('test product', 10); // Output results var_dump($results);
缓存源数据
为了加快搜索速度,您可以使用任何PSR-6兼容的缓存池来缓存源数据。以下是一个示例。
// Create cache pool $filesystemAdapter = new Local(storage_path().'/search-cache/'); $filesystem = new Filesystem($filesystemAdapter); $cacheItemPool = new FilesystemCachePool($filesystem); // Set cache expiry time $cacheExpiryInSeconds = 300; // Create a new Omega Search object $search = new OmegaSearch; // Configure the Omega Search object $search->setDatabaseConnection($pdo) ->setTable('products') ->setPrimaryKey('product_groupid') ->setFieldsToSearch(['product_name']) ->setCache($cacheItemPool, $cacheExpiryInSeconds); // Setup cache