日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

PHP編寫的全功能全文搜索引擎

admin
2025年4月3日 0:15 本文熱度 400

概述

TNTSearch是一款完全用PHP編寫的全文搜索(FTS)引擎。只需簡單配置,你就能在幾分鐘內(nèi)添加出色的搜索體驗。

功能包括

  • 模糊搜索
  • 即時搜索
  • 地理搜索
  • 文本分類
  • 詞干提取
  • 自定義分詞器
  • BM25排名算法
  • 布爾搜索
  • 結(jié)果高亮顯示
  • 動態(tài)索引更新(無需每次都重新索引)
  • 可通過Packagist.org輕松部署

我們還創(chuàng)建了一些演示頁面,展示了n - gram在容錯檢索中的實際應(yīng)用。該軟件包有許多輔助函數(shù),如用于距離計算的Jaro - Winkler和余弦相似度函數(shù)。它支持英語、克羅地亞語、阿拉伯語、意大利語、俄語、葡萄牙語和烏克蘭語的詞干提取。如果內(nèi)置的詞干提取器不夠用,該引擎允許你輕松插入任何兼容的Snowball詞干提取器。該軟件包的一些分支甚至支持中文。歡迎大家貢獻對其他語言的支持!

與許多其他引擎不同,TNTSearch的索引可以輕松更新,無需重新索引或使用增量更新。DigitalOcean

安裝

安裝TNTSearch最簡單的方法是通過composer:

composer require teamtnt/tntsearch

要求

在繼續(xù)之前,請確保你的服務(wù)器滿足以下要求:

  • PHP >= 7.1
  • PDO PHP擴展
  • SQLite PHP擴展
  • mbstring PHP擴展

示例

創(chuàng)建索引

為了能夠進行全文搜索查詢,你必須創(chuàng)建一個索引。 用法:

use TeamTNT\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;');
//$indexer->setLanguage('german'); $indexer->run();

重要提示:“storage”設(shè)置標記了所有索引將保存的文件夾,因此請確保對該文件夾有寫入權(quán)限,否則可能會拋出以下異常:[PDOException] SQLSTATE[HY000] [14] unable to open database file *

注意:如果你的主鍵不是id,請按如下方式設(shè)置:

$indexer->setPrimaryKey('article_id');

使主鍵可搜索

默認情況下,主鍵是不可搜索的。如果你想讓主鍵可搜索,只需運行:

$indexer->includePrimaryKey();

搜索

搜索短語或關(guān)鍵詞非常簡單:

use TeamTNT\TNTSearch\TNTSearch;

$tnt = new TNTSearch;

$tnt->loadConfig($config);
$tnt->selectIndex("name.index");

$res = $tnt->search("This is a test search"12);

print_r($res); //返回一個包含12個與查詢最匹配的文檔ID的數(shù)組 
// 要顯示結(jié)果,你需要針對應(yīng)用程序數(shù)據(jù)庫進行額外查詢 
// SELECT * FROM articles WHERE id IN $res ORDER BY FIELD(id, $res);

ORDER BY FIELD子句很重要,否則數(shù)據(jù)庫引擎將無法按要求的順序返回結(jié)果。

布爾搜索

use TeamTNT\TNTSearch\TNTSearch;

$tnt = new TNTSearch;

$tnt->loadConfig($config);
$tnt->selectIndex("name.index");

// 這將返回所有包含romeo但不包含juliet的文檔
$res = $tnt->searchBoolean("romeo -juliet");

// 返回所有包含romeo或hamlet的文檔
$res = $tnt->searchBoolean("romeo or hamlet");

// 返回所有包含romeo AND juliet或者prince AND hamlet的文檔
$res = $tnt->searchBoolean("(romeo juliet) or (prince hamlet)");

模糊搜索

可以通過設(shè)置以下成員變量來調(diào)整模糊度:

public $fuzzy_prefix_length  = 2;
public $fuzzy_max_expansions = 50;
public $fuzzy_distance       = 2//代表萊文斯坦距離;
use TeamTNT\TNTSearch\TNTSearch;

$tnt = new TNTSearch;

$tnt->loadConfig($config);
$tnt->selectIndex("name.index");
$tnt->fuzziness(true);

// 當模糊度標志設(shè)置為true時,關(guān)鍵詞juleit將返回與單詞juliet匹配的文檔,默認萊文斯坦距離為2
$res = $tnt->search("juleit");

更新索引

創(chuàng)建索引后,每次對文檔集合進行更改時,無需重新索引。TNTSearch支持動態(tài)索引更新。

use TeamTNT\TNTSearch\TNTSearch;

$tnt = new TNTSearch;

$tnt->loadConfig($config);
$tnt->selectIndex("name.index");

$index = $tnt->getIndex();

// 向索引中插入新文檔
$index->insert(['id' => '11''title' => 'new title''article' => 'new article']);

// 更新現(xiàn)有文檔
$index->update(11, ['id' => '11''title' => 'updated title''article' => 'updated article']);

// 從索引中刪除文檔
$index->delete(12);

自定義分詞器

首先,創(chuàng)建你自己的分詞器類。它應(yīng)該擴展AbstractTokenizer類,定義單詞分割的$pattern值,并且必須實現(xiàn)TokenizerInterface接口:

use TeamTNT\TNTSearch\Support\AbstractTokenizer;
use TeamTNT\TNTSearch\Support\TokenizerInterface;

class SomeTokenizer extends AbstractTokenizer implements TokenizerInterface
{
    static protected $pattern = '/[\s,\.]+/';

    public function tokenize($text) {
        return preg_split($this->getPattern(), strtolower($text), -1, PREG_SPLIT_NO_EMPTY);
    }
}

這個分詞器將使用空格、逗號和句號來分割單詞。準備好分詞器后,你應(yīng)該通過setTokenizer方法將其傳遞給TNTIndexer

$someTokenizer = new SomeTokenizer;

$indexer = new TNTIndexer;
$indexer->setTokenizer($someTokenizer);

另一種方法是通過配置傳遞分詞器:

use TeamTNT\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//可選,
    'tokenizer' => \TeamTNT\TNTSearch\Support\SomeTokenizer::class
]);

$indexer = $tnt->createIndex('name.index');
$indexer->query('SELECT id, article FROM articles;');
$indexer->run();

地理搜索

索引

$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
];

$distance = 2//千米
$candyShopIndex = new TNTGeoSearch();
$candyShopIndex->loadConfig($config);
$candyShopIndex->selectIndex('candyShops.index');

$candyShops = $candyShopIndex->findNearest($currentLocation, $distance, 10);

分類

use TeamTNT\TNTSearch\Classifier\TNTClassifier;

$classifier = new TNTClassifier();
$classifier->learn("A great game""Sports");
$classifier->learn("The election was over""Not sports");
$classifier->learn("Very clean match""Sports");
$classifier->learn("A clean but forgettable game""Sports");

$guess = $classifier->predict("It was a close election");
var_dump($guess['label']); //返回 "Not sports"

保存分類器

$classifier->save('sports.cls');

加載分類器

$classifier = new TNTClassifier();
$classifier->load('sports.cls');


閱讀原文:原文鏈接


該文章在 2025/4/3 18:32:49 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产va免费视频一区二区三区 | 免费精品国产自 | 国产欧美日韩制服在线 | 免费的三及片国产中文欧美 | 乱伦中字网站 | 国产日韩精品欧美激情在线 | 绝色影视在线观看免费版电视剧 | 国产亚洲天堂午夜福利小视频 | 99re视频热这里只有精品7 | 暴雨入室侵犯进出肉体免费观看 | 日韩精品一区二区三区四区 | 国产在线videos | 日本a级特黄特黄刺激大片 国产真实露脸 | 国产在线精选免费视频含羞草 | 精品国产乱子伦一区二区三区 | 国产国产精品人在线视 | 国产亚洲sss在线观看 | 国产精选在线观看 | 欧一美一性一交一乱一性一 | 免费观看91视频 | 欧美视频一区女女视频 | h在线观看情趣视频 | 囯产精品一区二区三区乱码 | 国语自产偷拍精品视频偷最新 | 国产欧美精品区一区二区三区 | 国产精品小说 | 国产日产免费视频网站 | 欧美乱妇高清无乱码免费 | 国产亚洲欧美一区二区三区 | 国产精品亚洲产品一区二区三区 | 亚洲伦理一区二区三区 | 日本一本草久国产欧美日韩 | 国产免费破外女真实出血视 | 岛国成人免费大片在 | 日本精产品久观看视频下站 | 日韩国产欧美经典 | 欧洲女人牲 | 国产又爽又黄免费 | 欧美中文字幕一区二区三区 | 精品国产ⅴ | 欧美日韩视频二区三区 |