emma/searchengine

PHP - MySQL/SQL 搜索引擎。考虑到将 MySQL/MSSQL/SQL 作为工业级应用程序搜索引擎后端所面临的挑战。开发了一些优化技术和算法来提升性能,使 SQL 数据库在搜索方面表现得像魔法一样。

v2.0.2 2022-02-14 13:36 UTC

This package is auto-updated.

Last update: 2024-09-06 16:12:42 UTC


README

A Php - MySql Search Engine. 考虑到将 MySQL/MSSQL/SQL 作为工业级应用程序搜索引擎后端所面临的挑战。开发了一些优化技术和算法来提升性能,使 SQL 数据库在搜索方面表现得像魔法一样。

如何使用

下载后请参阅包中的示例,以便快速了解如何部署库。

以下为相同示例

error_reporting(E_ALL ^ E_NOTICE);

include dirname(FILE) . DIRECTORY_SEPARATOR . "autoloader.php";

/**

  • 示例数据库来源
  • https://github.com/datacharmer/test_db
  • 如果在使用 XAMPP 并在 Windows 上
    1. 创建一个空数据库:"employees"
    1. 使用此存储库中的 test_db.sql,因为我已经帮助编辑了 employees.sql 文件,以便于导入。
    1. 然后,打开命令行(Windows)
    1. cd c:\xampp\mysql\bin
    1. C:\xampp\mysql\bin> mysql -u {username} -p {databasename} < file_name.sql

*/

/**

  • 创建 MySQL 连接 */ $connection = SearchEngine\SQL\PDOConnection::getInstance(new SearchEngine\SQL\ConnectionProperty("localhost", "root", "", "employees"));

/**

  • 示例 1:全文搜索示例:首先,在你的 employees 数据库上运行此 SQL
  • ALTER TABLE employees ADD FULLTEXT(first_name, last_name);
  • ===================================================================================================================== */

/** 搜索字符串:数据库内要搜索的字符串(布尔搜索)。 */ $searchString = "Georgi OR Paddy OR King NOT Gregory";

$SqlLoadDB = new SearchEngine\SQL\SqlLoadDB( $connection, (new SearchEngine\SQL\QueryBuilder())->setTableName("employees"), new SearchEngine\SentenceAnalyzer\MysqlFullText( $searchString, ["employees.first_name", "employees.last_name"], SearchEngine\SentenceAnalyzer\MysqlFullText::IN_BOOLEAN_MODE ) );

//现在,搜索 $searchEngine = new SearchEngine\SearchEngine(); $searchEngine->add($SqlLoadDB) // 在查看最终结果之前在搜索引擎上注册一个回调(可选)... ->registerResultCallBack(function ($searchResult) { while (count($searchResult) < 4095) { //简单地重复搜索以增加结果总数... //这只是如何添加内联回调的一个示例。 $result2 = $searchResult; $searchResult = array_merge($searchResult, $result2); } return $searchResult; });

$result = $searchEngine->search()->getResult();

/**

  • 示例 2:通过创建另一个 SqlLoadDB() 测试使用多个数据源
  • ===================================================================================================================== */

/** 使用查询构建器构建您的搜索查询... / $mysqlQueryBuilder = new SearchEngine\SQL\QueryBuilder(); $mysqlQueryBuilder->select(array( /* employees.first_name As employeesfirst_name : 如果存在重复列,请使用此选项。 */ "employees.first_name" => "First Name", "employees.emp_no" => "Employee Number", "employees.birth_date", "employees.hire_date", ))->from("employees") ->leftJoin("dept_emp", "dept_emp.emp_no = employees.emp_no") ->where("employees.first_name IN ('Georgi', 'Paddy', 'King')") ->andWhere("employees.first_name NOT IN ('Gregory')")

/** Another Method of Adding Single Column to select() Field-list While also testing the Mysql UNION function */
->union()
->selectColumn("employees.first_name", "First Name")
->selectColumn("employees.emp_no", "Employee Number")
->selectColumn("employees.birth_date")
->selectColumn("employees.hire_date")
->from("employees")
->leftJoin("dept_emp", "dept_emp.emp_no = employees.emp_no")
->where("employees.first_name IN ('Georgi', 'Paddy', 'King')")
->andWhere("employees.first_name NOT IN ('Gregory')");

$SqlLoadDB2 = new SearchEngine\SQL\SqlLoadDB( $connection, $mysqlQueryBuilder, new SearchEngine\SentenceAnalyzer\SqlLike($searchString) ); //现在,搜索 $searchEngine = $searchEngine->reset(); $searchEngine->add($SqlLoadDB2)->registerResultCallBack(function ($searchResult) { while (count($searchResult) < 4095) { $result2 = $searchResult; $searchResult = array_merge($searchResult, $result2); } return $searchResult; }); $result2 = $searchEngine->search()->getResult();

/**

  • 示例 3:文件系统搜索... / /* @var SearchEngine\FileSystem\SearchOption $fileSystemDataSource / $fileSystemDataSource = new SearchEngine\FileSystem\SearchOption( dirname(FILE). DIRECTORY_SEPARATOR . "dictionary", /* >> 这可以是文件或目录 ==>> */ "BASIC" ); $fileSystemDataSource->setGroupResultByFilePath(true); $fileSystemLoadDB = new SearchEngine\FileSystem\CtrlF($fileSystemDataSource); //现在,搜索 $searchEngine = $searchEngine->reset(); $result3 = $searchEngine->add($fileSystemLoadDB)->search()->getResult();

echo "

示例 1 - 搜索结果

; var_dump($result); echo "

示例 2 - 搜索结果

; var_dump($result2); echo "

示例 3 - 搜索结果

; var_dump($result3);