php全文检索实现
PHP全文检索实现方法
使用MySQL全文索引
MySQL自带全文检索功能,适用于中小型应用。需要在表中创建FULLTEXT索引:
ALTER TABLE articles ADD FULLTEXT(title, content);
PHP查询示例:
$searchTerm = "关键词";
$query = "SELECT * FROM articles
WHERE MATCH(title, content) AGAINST(:search IN BOOLEAN MODE)";
$stmt = $pdo->prepare($query);
$stmt->bindValue(':search', $searchTerm);
$stmt->execute();
使用Elasticsearch
Elasticsearch是专业的全文搜索引擎,适合大规模数据和高性能需求。
安装Elasticsearch客户端:
composer require elasticsearch/elasticsearch
PHP示例代码:
require 'vendor/autoload.php';
$client = Elasticsearch\ClientBuilder::create()->build();
$params = [
'index' => 'articles',
'body' => [
'query' => [
'match' => [
'content' => '搜索词'
]
]
]
];
$response = $client->search($params);
使用Sphinx搜索引擎
Sphinx是高性能的独立搜索引擎,支持实时索引。
配置文件示例:
source articles {
type = mysql
sql_host = localhost
sql_user = user
sql_pass = password
sql_db = database
sql_query = SELECT id, title, content FROM articles
}
index articles {
source = articles
path = /var/data/articles
docinfo = extern
mlock = 0
morphology = stem_en
min_word_len = 2
}
searchd {
listen = 9312
log = /var/log/sphinxsearch/searchd.log
query_log = /var/log/sphinxsearch/query.log
}
PHP连接示例:
$sphinx = new SphinxClient();
$sphinx->SetServer("localhost", 9312);
$result = $sphinx->Query("搜索词", "articles");
使用Solr
Solr是基于Lucene的企业级搜索平台,功能强大。
PHP集成示例:
$options = [
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/core_name',
];
$client = new Solarium\Client($options);
$query = $client->createSelect();
$query->setQuery('content:关键词');
$result = $client->select($query);
使用纯PHP实现简易搜索
对于小型应用,可以使用PHP字符串函数实现基础搜索:
function simpleSearch($text, $keyword) {
$lines = explode("\n", $text);
$results = [];
foreach ($lines as $line) {
if (stripos($line, $keyword) !== false) {
$results[] = $line;
}
}
return $results;
}
性能优化建议
- 为中文搜索添加分词支持(如结巴分词)
- 对大文本字段建立单独索引
- 考虑使用缓存机制存储热门搜索结果
- 定期优化数据库索引
- 对于百万级数据量以上建议使用专业搜索引擎
选择方案时应考虑数据规模、性能需求和开发资源。小型项目可使用MySQL全文检索,中大型项目推荐Elasticsearch或Sphinx。







