基本实践

<?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

xunsearch基本使用的更多相关文章

  1. Xunsearch 中文全文搜索

    原文地址:http://www.yiichina.com/code/661 官网地址:http://www.xunsearch.com/ 1.安装 wget http://www.xunsearch. ...

  2. Xunsearch迅搜(基于 xapian+scws 的开源中文搜索引擎)安装与简单使用

    今天鼓捣了xunsearch,感觉官方指南写得挺详细,于是按照指南一步一步走,但是感觉越看越凌乱,像看API一样,新手看得特费劲,网上也少有新手教程,于是略过今天的歪路,记录一下我的安装步骤. Xun ...

  3. XunSearch(讯搜)的使用教程步骤

    一.安装编译工具 yum install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml2-devel ...

  4. xunsearch增量索引改进版

    最近测试了xunserach全文索引程序.xunsearch只有LINUX版,所以想用windows服务器请使用其它全文索引程序.xunsearch本身不像coreseek那样自带增量索引的功能,所以 ...

  5. xunsearch安装配置

    1.wget http://www.xunsearch.com/download/xunsearch-full-latest.tar.bz2 2.tar -xjf xunsearch-full-lat ...

  6. xunsearch迅搜体验

    安装与启动 http://www.xunsearch.com/doc/php/guide/start.installation 编写配置文件 http://www.xunsearch.com/doc/ ...

  7. linux安装xunsearch

    首先要确保ubuntu安装了gcc g++ make sudo apt-get install make gcc g++ 然后安装zlib,用来解压的: apt-get install zlib1g- ...

  8. 搜索服务器xunsearch实现

    安装方法:   centos 6.6 64位   histroy:   12  cd /srv/   13  wget http://www.xunsearch.com/download/xunsea ...

  9. xunsearch安装与卸载

    刚接触xunsearch(迅搜)的时候,我是排斥的.排斥的原因不是因为害怕学习新技术(其实我是对心技术很感兴趣),而是因为:一方面xunsearch是国人开发的,对于国人写的开源产品,我不是太感兴趣( ...

  10. Ubuntu16.04下安装xunsearch+opencc实现php客户端的中文分词

    1.准备服务器环境 apt-get install apache2 php mysql-server apt-get install mysql-client phpmyadmin apt-get i ...

随机推荐

  1. yii定时任务(linux)

    yii写好了,计划任务,那么需要测试,测试地址大致: 我的测试文件名称:TestControllers.php, windows环境下: 我的项目在f:\www下, CMD: f:/www/ php ...

  2. 如何用VC编写供PB调用的DLL

    和编写一般的DLL方法相同,需要注意以下两点: (1)调用约定 c函数有_stdcall._cdecl._fastcall等多种调用约定,调用约定用来说明函数参数的压栈顺序和由谁(函数自身还是调用者) ...

  3. app与后台的token、sessionId、RSA加密登录认证与安全解决方案

    一.登录机制 粗略地分析, 登录机制主要分为登录验证.登录保持.登出三个部分.登录验证是指客户端提供用户名和密码,向服务器提出登录请求,服务器判断客户端是否可以登录并向客户端确认. 登录认保持是指客户 ...

  4. Fiddler工作原理与代理设置

    1,什么是Fiddler Fiddler是一个http协议调试代理工具,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的 ...

  5. Java.lang包的接口解读

    Java.lang包中提供了八个接口: 1.Appendable 能够被追加 char 序列和值的对象.如果某个类的实例打算接收来自 Formatter的格式化输出,那么该类必须实现 Appendab ...

  6. Django 常见的异常

    Django 常见的异常 1 'WSGIRequest' object has no attribute 'user' Django版本的问题,1.10之前,中间件的key为MIDDLEWARE_CL ...

  7. ajax 提交 注册表单 到MySQL数据库

    今天按照要求,要做一个登陆.注册表单,本来样式做好就行了,本来咱就是干前端的,但让咱自己都没想到的是,不到一个小时竟然都干完了,实在闲的蛋疼,就想到链接数据库玩,遥想当年,毕竟咱也是写过后台的,哪知, ...

  8. Date扩展 正则匹配

    <script> Date.prototype.format=function(){ var d=this; //严格匹配 yyyy-mm-dd hh-mm-ss var reg1=/yy ...

  9. Java中BIO,NIO,AIO的理解

    在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解.具体如下: 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 ...

  10. 作为一名Java开发工程师需要掌握的专业技能

    在学习Java编程完之后,学员们面临的就是就业问题.作为一名Java开发工程师,企业在招聘的时候,也是有一定的标准的. 为了帮助大家更好的找到适合自己的工作,在这里分享了作为一名Java开发工程师需要 ...