狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

PHP編寫(xiě)的全功能全文搜索引擎

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

概述

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

功能包括

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

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

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

安裝

安裝TNTSearch最簡(jiǎn)單的方法是通過(guò)composer:

composer require teamtnt/tntsearch

要求

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

  • PHP >= 7.1
  • PDO PHP擴(kuò)展
  • SQLite PHP擴(kuò)展
  • mbstring PHP擴(kuò)展

示例

創(chuàng)建索引

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

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è)置標(biāo)記了所有索引將保存的文件夾,因此請(qǐng)確保對(duì)該文件夾有寫(xiě)入權(quán)限,否則可能會(huì)拋出以下異常:[PDOException] SQLSTATE[HY000] [14] unable to open database file *

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

$indexer->setPrimaryKey('article_id');

使主鍵可搜索

默認(rèn)情況下,主鍵是不可搜索的。如果你想讓主鍵可搜索,只需運(yùn)行:

$indexer->includePrimaryKey();

搜索

搜索短語(yǔ)或關(guān)鍵詞非常簡(jiǎ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); //返回一個(gè)包含12個(gè)與查詢(xún)最匹配的文檔ID的數(shù)組 
// 要顯示結(jié)果,你需要針對(duì)應(yīng)用程序數(shù)據(jù)庫(kù)進(jìn)行額外查詢(xún) 
// SELECT * FROM articles WHERE id IN $res ORDER BY FIELD(id, $res);

ORDER BY FIELD子句很重要,否則數(shù)據(jù)庫(kù)引擎將無(wú)法按要求的順序返回結(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)");

模糊搜索

可以通過(guò)設(shè)置以下成員變量來(lái)調(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);

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

更新索引

創(chuàng)建索引后,每次對(duì)文檔集合進(jìn)行更改時(shí),無(wú)需重新索引。TNTSearch支持動(dòng)態(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)建你自己的分詞器類(lèi)。它應(yīng)該擴(kuò)展AbstractTokenizer類(lèi),定義單詞分割的$pattern值,并且必須實(shí)現(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);
    }
}

這個(gè)分詞器將使用空格、逗號(hào)和句號(hào)來(lái)分割單詞。準(zhǔn)備好分詞器后,你應(yīng)該通過(guò)setTokenizer方法將其傳遞給TNTIndexer

$someTokenizer = new SomeTokenizer;

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

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

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);

分類(lèi)

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"

保存分類(lèi)器

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

加載分類(lèi)器

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


閱讀原文:原文鏈接


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