divineomega/omega-search

搜索功能使您能够轻松地将智能搜索引擎添加到您的网站或Web应用程序中。

v4.1.0 2020-03-05 12:02 UTC

This package is auto-updated.

Last update: 2024-09-05 22:29:31 UTC


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方法。传递给此方法的查询必须包含一个SELECTLIMIT ? , ?,否则将抛出异常。在覆盖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