PHP XunSearch基本使用

image

基本实践

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 创建对象
$xs = new XS('demo');

// 查询
$docs = $xs->search->search('测试');

// 输出
print_r($docs);

异常捕获

try
{
    $xs = new XS('demo');
    $docs = $xs->search->setQuery('测试')->setLimit(5)->search();
    foreach ($docs as $doc)
    {
        echo $doc->rank() . ". " . $doc->subject . " [" . $doc->percent() . "%]\n";
        echo $doc->message . "\n";
    }
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}

XSDocument 文档

docid() 取得搜索结果文档的 docid 值 (实际数据库内的 id,一般用不到)
rank() 取得搜索结果文档的序号值 (第X条结果)
percent() 取得搜索结果文档的匹配百分比 (结果匹配度, 1~100)
weight() 取得搜索结果文档的权重值 (浮点数)
ccount() 取得搜索结果折叠的数量 (按字段折叠搜索时才有效)

添加操作

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $doc->pid = 4;
    $doc->subject = "Hello,XS";
    $doc->message = "Hello,XS内容";
    $xs->index->add($doc);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
// 引入
require_once './sdk/xs/lib/XS.php';

try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $doc['pid'] = 5;
    $doc['subject'] = "Hello,XS";
    $doc['message'] = "Hello,XS内容";
    $xs->index->add($doc);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}
<?php
// 引入
require_once './sdk/xs/lib/XS.php';

try
{
    $xs = new XS('demo');
    $doc = new XSDocument();
    $doc ->setFields([
        'pid' => 6,
        'subject' => "Hello,XS",
        'message' => "Hello,XS内容"
    ]);

    $xs->index->add($doc);
}
catch (XSException $e)
{
    echo $e;               // 直接输出异常描述
    if (defined('DEBUG'))  // 如果是 DEBUG 模式,则输出堆栈情况
        echo "\n" . $e->getTraceAsString() . "\n";
}

建立索引的过程会有点延迟!

$index->add($doc)->flushIndex()

可以临时处理成同步的。

ini

string 字符型,适用多数情况,也是默认值
numeric 数值型,包含整型和浮点数,仅当字段需用于以排序或区间检索时才设为该类型,否则请使用 string 即可
date 日期型,形式为 YYYYmmdd 这样固定的 8 字节,如果没有区间检索或排序需求不建议使用
id 主键型,确保每条数据具备唯一值,是索引更新和删除的凭据,每个搜索项目必须有且仅有一个 id 字段,该字段的值不区分大小写
title 标题型,标题或名称字段,至多有一个该类型的字段
body 内容型,主内容字段, 即本搜索项目中内容最长的字段,至多只有一个该类型字段,本字段不支持字段检索

type = string
project.name = sample
project.default_charset = GBK
;server.index = 8383
;server.search = 8384

[pid]
type = id

[subject]
type = title

[message]
type = body

[dateline]
type = numeric

[author]
index = both

[authorid]

[tid]
index = self
tokenizer = full

[fid]
index = self
tokenizer = full

[flag]

更新、修改文档

如果索引数据库中已存在主键值相同的文档,那么相当于先删除原有的文档,再用当前文档替换它。 如果未存在主键值相同的文档,则效果和添加文档完全一致。

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

$xs = new XS('my');
$data = array(
    'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识
    'subject' => '测试文档的标题',
    'message' => '测试文档的内容部分',
    'chrono' => time()
);

// 创建文档对象
$doc = new XSDocument;
$doc->setFields($data);

// 更新到索引数据库中
$xs->index->update($doc)->flushIndex();

删除文档

1.按主键删除

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 创建xs
$xs = new XS('my');
// 创建index
$index = $xs->index;
// 删除
$index->del('1')->flushIndex();

// 删除
$index->del(['4','5'])->flushIndex();

2.按内容删除

<?php
// 引入
require_once './sdk/xs/lib/XS.php';


$xs = new XS('my');

// 创建xs
$xs = new XS('my');
// 创建index
$index = $xs->index;
// 删除
$index->del('测试','subject')->flushIndex();

此外删除操作和添加文档一样,也是一个异步行为。

清空索引

// 创建xs
$xs = new XS('my');
// 创建index
$index = $xs->index;
// 删除
$index->clean();

平滑重建索引

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 创建xs
$xs = new XS('my');
// 创建index
$index = $xs->index;
// 宣布开始重建索引
$index->beginRebuild();

// 然后在此开始添加数据
$data = array(
    'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识
    'subject' => '测试文档的标题',
    'message' => '测试文档的内容部分',
    'chrono' => time()
);

// 创建文档对象
$doc = new XSDocument;
$doc->setFields($data);

$index->add($doc);


// 告诉服务器重建完比
$index->endRebuild();

使用索引缓冲区

一次性提交服务操作

<?php
// 引入
require_once './sdk/xs/lib/XS.php';

// 创建xs
$xs = new XS('my');
// 创建index
$index = $xs->index;

// 开启缓冲区,默认 4MB,如 $index->openBuffer(8) 则表示 8MB
$index->openBuffer();

// 然后在此开始添加数据
$data = array(
    'pid' => 2, // 此字段为主键,是进行文档替换的唯一标识
    'subject' => '测试文档的标题',
    'message' => '测试文档的内容部分',
    'chrono' => time()
);

// 创建文档对象
$doc = new XSDocument;
$doc->setFields($data);
// 在此进行批量的文档添加、修改、删除操作
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);
$index->add($doc);


$index->closeBuffer(); // 关闭缓冲区,必须和 openBuffer 成对使用

自定义 SCWS 词库

1.全局自定义词库

$prefix/etc/dict_user.txt
# Custom dictionary for scws (UTF-8 encoding)
# 每行一条记录,以 # 开头的号表示注释忽略
# 每行最多包含 4 个字段,依次代表 "词条" "TF" "IDF" "词性"
# 字段之间用空格或制表符分开,特殊词性 "!" 用于表示删除该词
# 参见 scws 自定义词典帮助:
# http://bbs.xunsearch.com/showthread.php?tid=1303
# $Id$
#
# WORD      TF      IDF     ATTR
# ------------------------------------------------------

2.项目自定义词库(这个貌似更好的读取)

$prefix/data/项目名称/dict_user.txt

转载https://www.cnblogs.com/jiqing9006/p/9254726.html
手册https://api.yuhal.com/file/xs_php_manual.chm

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,307评论 0 9
  • 索引是应用程序设计和开发的一个重要方面。 若索引太多, 应用程序的性能可能会受到影响。 而索引太少, 对查询性能又...
    好好学习Sun阅读 1,038评论 0 4
  • 一、 列属性 真正的对列的约束是依赖于数据的类型,但是这种约束比较单一,所以需要更多的约束,整个时候就是用到了字段...
    致自己_cb38阅读 413评论 0 0
  • 香樟是我很喜欢的植物之一,在上海也比较常见,几乎所有的大学都会有香樟,马路也会有,当然以前发租界区域会以法国梧桐为...
    小草在成长Anna阅读 141评论 0 1
  • 光位是指光源相对于被摄体的位置,即光线的方向与角度。 光位是摄影用光中需要考虑的重要环节。不同光位的造型效果和质感...
    胡子拉碴的菇凉阅读 2,054评论 0 0