企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 概述 php 代码 ``` <?php use Fukuball\Jieba\Finalseg; use Fukuball\Jieba\Jieba; require 'vendor/autoload.php'; $pdo = new PDO("pgsql:host=localhost;dbname=demo", "postgres", "postgres"); /*创建测试数据*/ $data[] = [ 'title' => '测试标题', 'text_column' => '其中的Bamboo安装和使用都比较复杂,所以我选择的是zhparser', ]; $data[] = [ 'title' => '清明上河图', 'text_column' => 'scws是简易中文分词系统的缩写,它的原理其实很简单', ]; $data[] = [ 'title' => '富春山居图', 'text_column' => '基于词典,将文本中的内容按照词典进行分词,提取关键字等。github上的地址在这里。它是xunsearch的核心分词系统', ]; Jieba::init(); Finalseg::init(); foreach ($data as $item) { //对标题分词 $title_vector = implode(" ", Jieba::cutForSearch($item['title'])); // 对内容分词 // todo 可以在优化,把不会用于搜索的提出掉 $search_vector = implode(" ", Jieba::cutForSearch($item['text_column'])); // simple 为简单分词,使用空格区别,因为我们已经用程序分割,所以此处只需要空格分词即可 // setweight 设置权重,把title 的权重设置的A,内容去权重设置B,当然实际场景还可能存在作者等信息,自行分析 // || 符号为 pgsql 的字符串并且字符 // 此处采用插入时直接把分词一块插入,也可以插入后,在进行更新 $query = sprintf( "INSERT INTO example_table (title,text_column,search_vector) VALUES ('%s','%s', setweight(to_tsvector('simple','%s'), 'A') || setweight(to_tsvector('simple', '%s'), 'B'))", $item['title'], $item['text_column'], $title_vector, $search_vector ); $PDOStatement = $pdo->exec($query); if ($PDOStatement===false){ print_r($pdo->errorInfo()); die("error"); } } $query='简易中文分词系统'; $cut = Jieba::cut($query); $cut_str=implode(" ",$cut); $PDOStatement2 = $pdo->query(sprintf("SELECT id,title,text_column FROM example_table WHERE search_vector @@ plainto_tsquery('SIMPLE', '%s')",$cut_str)); $var = $PDOStatement2->fetch(PDO::FETCH_ASSOC); print_r($var); //Array //( // [id] => 15 // [title] => 富春山居图 // [text_column] => 基于词典,将文本中的内容按照词典进行分词,提取关键字等。github上的地址在这里。它是xunsearch的核心分词系统 //) ```