当前位置:首页>php>PHP搜索新选择:TNTSearch的安装、配置与最佳实践

PHP搜索新选择:TNTSearch的安装、配置与最佳实践

  • 2026-10-01 21:39:57
PHP搜索新选择:TNTSearch的安装、配置与最佳实践

商务合作加微信:2230304070 

学习与交流:PHP技术交流微信群 

2025年 JetBrains全家桶通用激活码&账号 支持最新版本

https://web.52shizhan.cn

概述

TNTSearch是一款完全用PHP编写的全文搜索(FTS)引擎,只需简单配置就能在几分钟内为您的应用添加出色的搜索体验。

核心功能

  • 搜索功能
    :模糊搜索、即时搜索、布尔搜索、地理搜索
  • 文本处理
    :词干提取、自定义分词器、文本分类
  • 结果优化
    :BM25排名算法、结果高亮显示
  • 索引管理
    :动态索引更新(无需重新索引)
  • 多语言支持
    :英语、克罗地亚语、阿拉伯语、意大利语、俄语、葡萄牙语和乌克兰语
  • 辅助函数
    :Jaro-Winkler距离计算、余弦相似度函数
  • 扩展性
    :支持兼容Snowball的词干提取器,部分分支支持中文

安装与要求

安装方法
composer require teamtnt/tntsearch
系统要求
  • PHP >= 7.1
  • PDO PHP扩展
  • SQLite PHP扩展
  • mbstring PHP扩展

使用指南

创建索引
useTeamTNT\TNTSearch\TNTSearch;$tnt = new TNTSearch;$tnt->loadConfig(['driver'    => 'mysql','host'      => 'localhost','database'  => 'dbname','username'  => 'user','password'  => 'pass','storage'   => '/var/www/tntsearch/examples/','stemmer'   => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class //可选]);$indexer = $tnt->createIndex('name.index');$indexer->query('SELECT id, article FROM articles;');

注意事项:

  • storage
    路径需要写入权限
  • 默认主键为id,可通过$indexer->setPrimaryKey()修改
  • 主键默认不可搜索,使用$indexer->includePrimaryKey()启用
基本搜索
$tnt->selectIndex("name.index");$res = $tnt->search("This is a test search", 12);
布尔搜索
// 包含romeo但不包含juliet$res = $tnt->searchBoolean("romeo -juliet");// 包含romeo或hamlet$res = $tnt->searchBoolean("romeo or hamlet");// 复杂条件$res = $tnt->searchBoolean("(romeo juliet) or (prince hamlet)");
模糊搜索
$tnt->fuzziness(true);$tnt->fuzzy_distance = 2; // 莱文斯坦距离$res = $tnt->search("juleit"); // 匹配juliet
索引更新
$index = $tnt->getIndex();$index->insert(['id' => '11', 'title' => 'new title', 'article' => 'new article']);$index->update(11, ['id' => '11', 'title' => 'updated title', 'article' => 'updated article']);$index->delete(12);

高级功能

自定义分词器
classSomeTokenizerextendsAbstractTokenizerimplementsTokenizerInterface{staticprotected $pattern = '/[\s,\.]+/';publicfunctiontokenize($text){return preg_split($this->getPattern(), strtolower($text), -1, PREG_SPLIT_NO_EMPTY);    }}// 使用分词器$indexer = new TNTIndexer;$indexer->setTokenizer(new SomeTokenizer);
地理搜索

创建索引:

$candyShopIndexer = new TNTGeoIndexer;$candyShopIndexer->loadConfig($config);$candyShopIndexer->createIndex('candyShops.index');$candyShopIndexer->query('SELECT id, longitude, latitude FROM candy_shops;');$candyShopIndexer->run();

搜索附近位置:

$currentLocation = ['longitude' => 11.576124,'latitude'  => 48.137154];$candyShopIndex = new TNTGeoSearch();$candyShopIndex->loadConfig($config);$candyShopIndex->selectIndex('candyShops.index');$candyShops = $candyShopIndex->findNearest($currentLocation, 2, 10); // 2公里范围内10个结果
文本分类
$classifier = new TNTClassifier();$classifier->learn("A great game", "Sports");$classifier->learn("The election was over", "Not sports");// 更多训练数据...$guess = $classifier->predict("It was a close election");var_dump($guess['label']); // 输出 "Not sports"// 保存和加载分类器$classifier->save('sports.cls');$classifier->load('sports.cls');

总结

TNTSearch为PHP开发者提供了强大而灵活的全文搜索解决方案,从基本搜索到高级功能如地理搜索和文本分类一应俱全。其纯PHP实现和简单的集成方式使其成为PHP项目中实现搜索功能的优秀选择。

参考链接:
以上就是本篇分钟的全部内容,希望各位程序员们努力提升个人技术。最后,小编温馨提示:每天阅读5分钟,每天学习一点点,每天进步一点点。

最新文章

随机文章