[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 API 参考文档
# XSSearch
[All Packages](#)| [属性](#)| [方法(函数)](#)
| 包 | [XS](#) |
|-----|-----|
| 继承关系 | class XSSearch »[XSServer](#) »[XSComponent](#) |
| 版本 | 1.0.0 |
| 源代码 | [sdk/php/lib/XSSearch.class.php](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php) |
XS 搜索类, 执行搜索功能有部分方法支持串接操作
~~~
$xs->search->setQuery($str)->setLimit(10, 10)->search();
$xs->close();
~~~
### Public 属性
[隐去继承来的属性](#)
| 名称 | 类型 | 描述 | 定义于 |
|-----|-----|-----|-----|
| [allSynonyms](#) | array | 获取当前库内的全部同义词列表 | XSSearch |
| [connString](#) | string | 连接字符串 | [XSServer](#) |
| [correctedQuery](#) | array | 获取修正后的搜索词列表 | XSSearch |
| [dbTotal](#) | int | 获取搜索数据库内的数据总量 | XSSearch |
| [facets](#) | array | 读取最近一次分面搜索记数 | XSSearch |
| [hotQuery](#) | array | 获取热门搜索词列表 | XSSearch |
| [lastCount](#) | int | 获取最近那次搜索的匹配总数估值 | XSSearch |
| [project](#) | string | 获取当前项目名称 | [XSServer](#) |
| [query](#) | string | 获取解析后的搜索语句 | XSSearch |
| [relatedQuery](#) | array | 获取相关搜索词列表 | XSSearch |
| [respond](#) | [XSCommand](#) | 从服务器读取响应指令 | [XSServer](#) |
| [socket](#) | mixed | 获取连接资源描述符 | [XSServer](#) |
| [xs](#) | [XS](#) | 服务端关联的 XS 对象 | [XSServer](#) |
### Protected 属性
[隐去继承来的属性](#)
| 名称 | 类型 | 描述 | 定义于 |
|-----|-----|-----|-----|
| [_conn](#) | | | [XSServer](#) |
| [_flag](#) | | | [XSServer](#) |
| [_project](#) | | | [XSServer](#) |
| [_sendBuffer](#) | | | [XSServer](#) |
| [_sock](#) | | | [XSServer](#) |
### Public 方法
[隐去继承来的方法](#)
| 名称 | 描述 | 定义于 |
|-----|-----|-----|
| [__construct()](#) | 构造函数, 打开连接 | [XSServer](#) |
| [__destruct()](#) | 析构函数, 关闭连接 | [XSServer](#) |
| [__get()](#) | 魔术方法 __get | [XSComponent](#) |
| [__isset()](#) | 魔术方法 __isset | [XSComponent](#) |
| [__set()](#) | 魔术方法 __set | [XSComponent](#) |
| [__unset()](#) | 魔术方法 __unset | [XSComponent](#) |
| [addDb()](#) | 添加搜索的数据库名, 支持多库同时搜索 | XSSearch |
| [addQueryString()](#) | 增加默认搜索语句 | XSSearch |
| [addQueryTerm()](#) | 增加默认搜索词汇 | XSSearch |
| [addRange()](#) | 添加搜索过滤区间或范围 | XSSearch |
| [addSearchLog()](#) | 添加搜索日志关键词到缓冲区里 | XSSearch |
| [addWeight()](#) | 添加权重索引词 | XSSearch |
| [close()](#) | 关闭连接 | [XSServer](#) |
| [count()](#) | 估算搜索语句的匹配数据量 | XSSearch |
| [execCommand()](#) | 执行服务端指令并获取返回值 | [XSServer](#) |
| [getAllSynonyms()](#) | 获取当前库内的全部同义词列表 | XSSearch |
| [getConnString()](#) | Returns 连接字符串 | [XSServer](#) |
| [getCorrectedQuery()](#) | 获取修正后的搜索词列表 | XSSearch |
| [getDbTotal()](#) | 获取搜索数据库内的数据总量 | XSSearch |
| [getExpandedQuery()](#) | 获取展开的搜索词列表 | XSSearch |
| [getFacets()](#) | 读取最近一次分面搜索记数 | XSSearch |
| [getHotQuery()](#) | 获取热门搜索词列表 | XSSearch |
| [getLastCount()](#) | 获取最近那次搜索的匹配总数估值 | XSSearch |
| [getProject()](#) | 获取当前项目名称 | [XSServer](#) |
| [getQuery()](#) | 获取解析后的搜索语句 | XSSearch |
| [getRelatedQuery()](#) | 获取相关搜索词列表 | XSSearch |
| [getRespond()](#) | 从服务器读取响应指令 | [XSServer](#) |
| [getSocket()](#) | 获取连接资源描述符 | [XSServer](#) |
| [hasRespond()](#) | 判断服务端是否有可读数据 | [XSServer](#) |
| [highlight()](#) | 搜索结果字符串高亮处理 | XSSearch |
| [markResetScheme()](#) | 标记字段方案重置 | XSSearch |
| [open()](#) | 连接搜索服务端并初始化 | XSSearch |
| [reopen()](#) | 重新打开连接 | [XSServer](#) |
| [search()](#) | 获取匹配的搜索结果文档 | XSSearch |
| [sendCommand()](#) | 往服务器直接发送指令 (无缓存) | [XSServer](#) |
| [setAutoSynonyms()](#) | 开启自动同义词搜索功能 | XSSearch |
| [setCharset()](#) | 设置字符集 | XSSearch |
| [setCollapse()](#) | 设置折叠搜索结果 | XSSearch |
| [setCutOff()](#) | 设置百分比/权重剔除参数 | XSSearch |
| [setDb()](#) | 设置要搜索的数据库名 | XSSearch |
| [setDocOrder()](#) | 设置结果按索引入库先后排序 | XSSearch |
| [setFacets()](#) | 设置分面搜索记数 | XSSearch |
| [setFuzzy()](#) | 开启模糊搜索 | XSSearch |
| [setLimit()](#) | 设置搜索结果的数量和偏移 | XSSearch |
| [setMultiSort()](#) | 设置多字段组合排序方式 | XSSearch |
| [setProject()](#) | 设置当前项目 | [XSServer](#) |
| [setQuery()](#) | 设置默认搜索语句 | XSSearch |
| [setRequireMatchedTerm()](#) | 设置在搜索结果文档中返回匹配词表 | XSSearch |
| [setScwsMulti()](#) | 设置当前搜索语句的分词复合等级 | XSSearch |
| [setSort()](#) | 设置搜索结果的排序方式 | XSSearch |
| [setSynonymScale()](#) | 设置同义词搜索的权重比例 | XSSearch |
| [setTimeout()](#) | 设置服务端超时秒数 | [XSServer](#) |
| [terms()](#) | 获取搜索语句中的高亮词条列表 | XSSearch |
### Protected 方法
[隐去继承来的方法](#)
| 名称 | 描述 | 定义于 |
|-----|-----|-----|
| [check()](#) | 检测服务端的连接情况 | [XSServer](#) |
| [connect()](#) | 连接服务端 | [XSServer](#) |
| [read()](#) | 读取数据 | [XSServer](#) |
| [write()](#) | 写入数据 | [XSServer](#) |
### 属性明细
allSynonyms属性 *只读* (自版本 v1.3.0 起可用)
public array [**getAllSynonyms**](#)(int $limit=0, int $offset=0, bool $stemmed=false)
获取当前库内的全部同义词列表
correctedQuery属性 *只读*
public array [**getCorrectedQuery**](#)(string $query=NULL)
获取修正后的搜索词列表通常当某次检索结果数量偏少时, 可以用该函数设计 "你是不是要找: ..." 功能
dbTotal属性 *只读*
public int [**getDbTotal**](#)()
获取搜索数据库内的数据总量
facets属性 (自版本 v1.1.0 起可用)
public array [**getFacets**](#)(string $field=NULL)
public XSSearch [**setFacets**](#)(mixed $field, bool $exact=false)
读取最近一次分面搜索记数必须在某一次 [search](#) 之后调用本函数才有意义
hotQuery属性 *只读*
public array [**getHotQuery**](#)(int $limit=6, string $type='total')
获取热门搜索词列表
lastCount属性 *只读*
public int [**getLastCount**](#)()
获取最近那次搜索的匹配总数估值
#### 参见
- [search](#)
query属性
public string [**getQuery**](#)(string $query=NULL)
public XSSearch [**setQuery**](#)(string $query)
获取解析后的搜索语句
relatedQuery属性 *只读*
public array [**getRelatedQuery**](#)(string $query=NULL, int $limit=6)
获取相关搜索词列表
### 方法明细
addDb()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>addDb</b>(string $name)</div></td></tr><tr><td class="paramNameCol">$name</td> <td class="paramTypeCol">string</td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L474](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L474) (**[显示](#)**)
`public function addDb($name)
{
$name = strval($name);
$this->execCommand(array('cmd' => CMD_SEARCH_ADD_DB, 'buf' => $name));
$this->_curDbs[] = $name;
return $this;
}`
添加搜索的数据库名, 支持多库同时搜索
#### 参见
- [setDb](#)
addQueryString()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public string <b>addQueryString</b>(string $query, int $addOp=0, float $scale=1)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句</td></tr><tr><td class="paramNameCol">$addOp</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">与旧语句的结合操作符, 如果无旧语句或为空则这此无意义, 支持的操作符有: CMD_QUERY_OP_AND CMD_QUERY_OP_OR CMD_QUERY_OP_AND_NOT CMD_QUERY_OP_XOR CMD_QUERY_OP_AND_MAYBE CMD_QUERY_OP_FILTER</td></tr><tr><td class="paramNameCol">$scale</td> <td class="paramTypeCol">float</td> <td class="paramDescCol">权重计算缩放比例, 默认为 1表示不缩放, 其它值范围 0.xx ~ 655.35</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">修正后的搜索语句</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L931](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L931) (**[显示](#)**)
`public function addQueryString($query, $addOp = CMD_QUERY_OP_AND, $scale = 1)
{
$query = $this->preQueryString($query);
$bscale = ($scale > 0 && $scale != 1) ? pack('n', intval($scale * 100)) : '';
$cmd = new XSCommand(CMD_QUERY_PARSE, $addOp, $this->_defaultOp, $query, $bscale);
$this->execCommand($cmd);
return $query;
}`
增加默认搜索语句
addQueryTerm()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>addQueryTerm</b>(string $field, string $term, int $addOp=0, float $scale=1)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引词所属的字段, 若为混合区词汇可设为 null 或 body 型的字段名</td></tr><tr><td class="paramNameCol">$term</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引词 (强制转为小写)</td></tr><tr><td class="paramNameCol">$addOp</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">与旧语句的结合操作符, 如果无旧语句或为空则这此无意义, 支持的操作符有:</td></tr><tr><td class="paramNameCol">$scale</td> <td class="paramTypeCol">float</td> <td class="paramDescCol">权重计算缩放比例, 默认为 1表示不缩放, 其它值范围 0.xx ~ 655.35</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L950](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L950) (**[显示](#)**)
`public function addQueryTerm($field, $term, $addOp = CMD_QUERY_OP_AND, $scale = 1)
{
$term = strtolower($term);
$term = XS::convert($term, 'UTF-8', $this->_charset);
$bscale = ($scale > 0 && $scale != 1) ? pack('n', intval($scale * 100)) : '';
$vno = $field === null ? XSFieldScheme::MIXED_VNO : $this->xs->getField($field, true)->vno;
$cmd = new XSCommand(CMD_QUERY_TERM, $addOp, $vno, $term, $bscale);
$this->execCommand($cmd);
return $this;
}`
增加默认搜索词汇
#### 参见
- [addQueryString](#)
addRange()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>addRange</b>(string $field, mixed $from, mixed $to)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">$from</td> <td class="paramTypeCol">mixed</td> <td class="paramDescCol">起始值(不包含), 若设为 null 则相当于匹配 <= to (字典顺序)</td></tr><tr><td class="paramNameCol">$to</td> <td class="paramTypeCol">mixed</td> <td class="paramDescCol">结束值(包含), 若设为 null 则相当于匹配 >= from (字典顺序)</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L331](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L331) (**[显示](#)**)
`public function addRange($field, $from, $to)
{
if ($from === '' || $from === false) {
$from = null;
}
if ($to === '' || $to === false) {
$to = null;
}
if ($from !== null || $to !== null) {
if (strlen($from) > 255 || strlen($to) > 255) {
throw new XSException('Value of range is too long');
}
$vno = $this->xs->getField($field)->vno;
$from = XS::convert($from, 'UTF-8', $this->_charset);
$to = XS::convert($to, 'UTF-8', $this->_charset);
if ($from === null) {
$cmd = new XSCommand(CMD_QUERY_VALCMP, CMD_QUERY_OP_FILTER, $vno, $to, chr(CMD_VALCMP_LE));
} elseif ($to === null) {
$cmd = new XSCommand(CMD_QUERY_VALCMP, CMD_QUERY_OP_FILTER, $vno, $from, chr(CMD_VALCMP_GE));
} else {
$cmd = new XSCommand(CMD_QUERY_RANGE, CMD_QUERY_OP_FILTER, $vno, $from, $to);
}
$this->execCommand($cmd);
}
return $this;
}`
添加搜索过滤区间或范围
addSearchLog()方法(自版本 v1.1.1 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>addSearchLog</b>(string $query, int $wdf=1)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要记录的数据</td></tr><tr><td class="paramNameCol">$wdf</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">需要记录的次数, 默认为 1</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L813](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L813) (**[显示](#)**)
`public function addSearchLog($query, $wdf = 1)
{
$cmd = array('cmd' => CMD_SEARCH_ADD_LOG, 'buf' => $query);
if ($wdf > 1) {
$cmd['buf1'] = pack('i', $wdf);
}
$this->execCommand($cmd, CMD_OK_LOGGED);
}`
添加搜索日志关键词到缓冲区里需要调用 [XSIndex::flushLogging](#) 才能确保立即刷新, 否则要隔一段时间
addWeight()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>addWeight</b>(string $field, string $term, float $weight=1)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引词所属的字段</td></tr><tr><td class="paramNameCol">$term</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引词</td></tr><tr><td class="paramNameCol">$weight</td> <td class="paramTypeCol">float</td> <td class="paramDescCol">权重计算缩放比例</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L368](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L368) (**[显示](#)**)
`public function addWeight($field, $term, $weight = 1)
{
return $this->addQueryTerm($field, $term, CMD_QUERY_OP_AND_MAYBE, $weight);
}`
添加权重索引词无论是否包含这种词都不影响搜索匹配, 但会参与计算结果权重, 使结果的相关度更高
#### 参见
- [addQueryTerm](#)
count()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public int <b>count</b>(string $query=NULL)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 若传入 null 使用默认语句, 调用后会还原默认排序方式 如果搜索语句和最近一次 <a href="XSSearch.html#search">search</a> 的语句一样, 请改用 <a href="XSSearch.html#getLastCount">getLastCount</a> 以提升效率 最大长度为 80 字节</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">匹配的搜索结果数量, 估算数值</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L529](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L529) (**[显示](#)**)
`public function count($query = null)
{
$query = $query === null ? '' : $this->preQueryString($query);
if ($query === '' && $this->_count !== null) {
return $this->_count;
}
$cmd = new XSCommand(CMD_SEARCH_GET_TOTAL, 0, $this->_defaultOp, $query);
$res = $this->execCommand($cmd, CMD_OK_SEARCH_TOTAL);
$ret = unpack('Icount', $res->buf);
if ($query === '') {
$this->_count = $ret['count'];
}
return $ret['count'];
}`
估算搜索语句的匹配数据量
getAllSynonyms()方法(自版本 v1.3.0 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getAllSynonyms</b>(int $limit=0, int $offset=0, bool $stemmed=false)</div></td></tr><tr><td class="paramNameCol">$limit</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">数量上限, 若设为 0 则启用默认值 100 个</td></tr><tr><td class="paramNameCol">$offset</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">偏移量, 即跳过的结果数量, 默认为 0</td></tr><tr><td class="paramNameCol">$stemmed</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否包含处理过的词根同义词, 默认为 false 表示否</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">同义词记录数组, 每个词条为键, 同义词条组成的数组为值</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L164](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L164) (**[显示](#)**)
`public function getAllSynonyms($limit = 0, $offset = 0, $stemmed = false)
{
$page = $limit > 0 ? pack('II', intval($offset), intval($limit)) : '';
$cmd = array('cmd' => CMD_SEARCH_GET_SYNONYMS, 'buf1' => $page);
$cmd['arg1'] = $stemmed == true ? 1 : 0;
$res = $this->execCommand($cmd, CMD_OK_RESULT_SYNONYMS);
$ret = array();
if (!empty($res->buf)) {
foreach (explode("\n", $res->buf) as $line) {
$value = explode("\t", $line);
$key = array_shift($value);
$ret[$key] = $value;
}
}
return $ret;
}`
获取当前库内的全部同义词列表
getCorrectedQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getCorrectedQuery</b>(string $query=NULL)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要展开的前缀, 可为拼音、英文、中文</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">返回搜索词组成的数组</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L777](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L777) (**[显示](#)**)
`public function getCorrectedQuery($query = null)
{
$ret = array();
try {
if ($query === null) {
if ($this->_count > 0 && $this->_count > ceil($this->getDbTotal() * 0.001)) {
return $ret;
}
$query = $this->cleanFieldQuery($this->_query);
}
if (empty($query) || strpos($query, ':') !== false) {
return $ret;
}
$buf = XS::convert($query, 'UTF-8', $this->_charset);
$cmd = array('cmd' => CMD_QUERY_GET_CORRECTED, 'buf' => $buf);
$res = $this->execCommand($cmd, CMD_OK_QUERY_CORRECTED);
if ($res->buf !== '') {
$ret = explode("\n", XS::convert($res->buf, $this->_charset, 'UTF-8'));
}
} catch (XSException $e) {
if ($e->getCode() != CMD_ERR_XAPIAN) {
throw $e;
}
}
return $ret;
}`
获取修正后的搜索词列表通常当某次检索结果数量偏少时, 可以用该函数设计 "你是不是要找: ..." 功能
getDbTotal()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public int <b>getDbTotal</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">数据总量</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L641](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L641) (**[显示](#)**)
`public function getDbTotal()
{
$cmd = new XSCommand(CMD_SEARCH_DB_TOTAL);
$res = $this->execCommand($cmd, CMD_OK_DB_TOTAL);
$tmp = unpack('Itotal', $res->buf);
return $tmp['total'];
}`
获取搜索数据库内的数据总量
getExpandedQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getExpandedQuery</b>(string $query, int $limit=10)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要展开的前缀, 可为拼音、英文、中文</td></tr><tr><td class="paramNameCol">$limit</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">需要返回的搜索词数量上限, 默认为 10, 最大值为 20</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">返回搜索词组成的数组</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L737](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L737) (**[显示](#)**)
`public function getExpandedQuery($query, $limit = 10)
{
$ret = array();
$limit = max(1, min(20, intval($limit)));
try {
$buf = XS::convert($query, 'UTF-8', $this->_charset);
$cmd = array('cmd' => CMD_QUERY_GET_EXPANDED, 'arg1' => $limit, 'buf' => $buf);
$res = $this->execCommand($cmd, CMD_OK_RESULT_BEGIN);
// echo "Raw Query: " . $res->buf . "\n";
// get result documents
while (true) {
$res = $this->getRespond();
if ($res->cmd == CMD_SEARCH_RESULT_FIELD) {
$ret[] = XS::convert($res->buf, $this->_charset, 'UTF-8');
} elseif ($res->cmd == CMD_OK && $res->arg == CMD_OK_RESULT_END) {
// got the end
// echo "Parsed Query: " . $res->buf . "\n";
break;
} else {
$msg = 'Unexpected respond in search {CMD:' . $res->cmd . ', ARG:' . $res->arg . '}';
throw new XSException($msg);
}
}
} catch (XSException $e) {
if ($e->getCode() != CMD_ERR_XAPIAN) {
throw $e;
}
}
return $ret;
}`
获取展开的搜索词列表
getFacets()方法(自版本 v1.1.0 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getFacets</b>(string $field=NULL)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">读取分面记数的字段, 若为 null 则返回全部分面搜索记录</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">返回由值和计数组成的关联数组, 若不存在或未曾登记过则返回空数组</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L409](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L409) (**[显示](#)**)
`public function getFacets($field = null)
{
if ($field === null) {
return $this->_facets;
}
return isset($this->_facets[$field]) ? $this->_facets[$field] : array();
}`
读取最近一次分面搜索记数必须在某一次 [search](#) 之后调用本函数才有意义
getHotQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getHotQuery</b>(int $limit=6, string $type='total')</div></td></tr><tr><td class="paramNameCol">$limit</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">需要返回的热门搜索数量上限, 默认为 6, 最大值为 50</td></tr><tr><td class="paramNameCol">$type</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">排序类型, 默认为 total(搜索总量), 可选值还有 lastnum(上周), currnum(本周)</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">返回以搜索词为键, 搜索指数为值的关联数组</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L655](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L655) (**[显示](#)**)
`public function getHotQuery($limit = 6, $type = 'total')
{
$ret = array();
$limit = max(1, min(50, intval($limit)));
// query from log_db
$this->xs->setScheme(XSFieldScheme::logger());
try {
$this->setDb(self::LOG_DB)->setLimit($limit);
if ($type !== 'lastnum' && $type !== 'currnum') {
$type = 'total';
}
$result = $this->search($type . ':1');
foreach ($result as $doc) /* @var $doc XSDocument */ {
$body = $doc->body;
$ret[$body] = $doc->f($type);
}
$this->restoreDb();
} catch (XSException $e) {
if ($e->getCode() != CMD_ERR_XAPIAN) {
throw $e;
}
}
$this->xs->restoreScheme();
return $ret;
}`
获取热门搜索词列表
getLastCount()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public int <b>getLastCount</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">匹配数据量, 如从未搜索则返回 false</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L632](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L632) (**[显示](#)**)
`public function getLastCount()
{
return $this->_lastCount;
}`
获取最近那次搜索的匹配总数估值
#### 参见
- [search](#)
getQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public string <b>getQuery</b>(string $query=NULL)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 若传入 null 使用默认语句</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">返回解析后的搜索语句</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L186](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L186) (**[显示](#)**)
`public function getQuery($query = null)
{
$query = $query === null ? '' : $this->preQueryString($query);
$cmd = new XSCommand(CMD_QUERY_GET_STRING, 0, $this->_defaultOp, $query);
$res = $this->execCommand($cmd, CMD_OK_QUERY_STRING);
if (strpos($res->buf, 'VALUE_RANGE') !== false) {
$regex = '/(VALUE_RANGE) (\d+) (\S+) (\S+?)(?=\))/';
$res->buf = preg_replace_callback($regex, array($this, 'formatValueRange'), $res->buf);
}
if (strpos($res->buf, 'VALUE_GE') !== false || strpos($res->buf, 'VALUE_LE') !== false) {
$regex = '/(VALUE_[GL]E) (\d+) (\S+?)(?=\))/';
$res->buf = preg_replace_callback($regex, array($this, 'formatValueRange'), $res->buf);
}
return XS::convert($res->buf, $this->_charset, 'UTF-8');
}`
获取解析后的搜索语句
getRelatedQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>getRelatedQuery</b>(string $query=NULL, int $limit=6)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 若传入 null 使用默认语句</td></tr><tr><td class="paramNameCol">$limit</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">需要返回的相关搜索数量上限, 默认为 6, 最大值为 20</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">返回搜索词组成的数组</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L689](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L689) (**[显示](#)**)
`public function getRelatedQuery($query = null, $limit = 6)
{
$ret = array();
$limit = max(1, min(20, intval($limit)));
// Simple to disable query with field filter
if ($query === null) {
$query = $this->cleanFieldQuery($this->_query);
}
if (empty($query) || strpos($query, ':') !== false) {
return $ret;
}
// Search the log database
$op = $this->_defaultOp;
$this->xs->setScheme(XSFieldScheme::logger());
try {
$result = $this->setDb(self::LOG_DB)->setFuzzy()->setLimit($limit + 1)->search($query);
foreach ($result as $doc) /* @var $doc XSDocument */ {
$doc->setCharset($this->_charset);
$body = $doc->body;
if (!strcasecmp($body, $query)) {
continue;
}
$ret[] = $body;
if (count($ret) == $limit) {
break;
}
}
} catch (XSException $e) {
if ($e->getCode() != CMD_ERR_XAPIAN) {
throw $e;
}
}
$this->restoreDb();
$this->xs->restoreScheme();
$this->_defaultOp = $op;
return $ret;
}`
获取相关搜索词列表
highlight()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public string <b>highlight</b>(string $value, $strtr=false)</div></td></tr><tr><td class="paramNameCol">$value</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要处理的数据</td></tr><tr><td class="paramNameCol">$strtr</td> <td class="paramTypeCol"></td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">高亮后的数据</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L828](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L828) (**[显示](#)**)
`public function highlight($value, $strtr = false)
{
// return empty value directly
if (empty($value)) {
return $value;
}
// initlize the highlight replacements
if (!is_array($this->_highlight)) {
$this->initHighlight();
}
// process replace
if (isset($this->_highlight['pattern'])) {
$value = preg_replace($this->_highlight['pattern'], $this->_highlight['replace'], $value);
}
if (isset($this->_highlight['pairs'])) {
$value = $strtr ?
strtr($value, $this->_highlight['pairs']) :
str_replace(array_keys($this->_highlight['pairs']), array_values($this->_highlight['pairs']), $value);
}
return $value;
}`
搜索结果字符串高亮处理对搜索结果文档的字段进行高亮、飘红处理, 高亮部分加上 em 标记
markResetScheme()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>markResetScheme</b>()</div></td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L486](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L486) (**[显示](#)**)
`public function markResetScheme()
{
$this->_resetScheme = true;
}`
标记字段方案重置
#### 参见
- [XS::setScheme](#)
open()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>open</b>(string $conn)</div></td></tr><tr><td class="paramNameCol">$conn</td> <td class="paramTypeCol">string</td> <td class="paramDescCol"></td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L55](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L55) (**[显示](#)**)
`public function open($conn)
{
parent::open($conn);
$this->_prefix = array();
$this->_fieldSet = false;
$this->_lastCount = false;
}`
连接搜索服务端并初始化每次重新连接后所有的搜索语句相关设置均被还原
#### 参见
- [XSServer::open](#)
search()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSDocument[] <b>search</b>(string $query=NULL, boolean $saveHighlight=true)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 若传入 null 使用默认语句, 最大长度为 80 字节</td></tr><tr><td class="paramNameCol">$saveHighlight</td> <td class="paramTypeCol">boolean</td> <td class="paramDescCol">是否存储查询词用于高亮处理, 默认为 true</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSDocument[]</td> <td class="paramDescCol">匹配的搜索结果文档列表</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L554](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L554) (**[显示](#)**)
`public function search($query = null, $saveHighlight = true)
{
if ($this->_curDb !== self::LOG_DB && $saveHighlight) {
$this->_highlight = $query;
}
$query = $query === null ? '' : $this->preQueryString($query);
$page = pack('II', $this->_offset, $this->_limit > 0 ? $this->_limit : self::PAGE_SIZE);
// get result header
$cmd = new XSCommand(CMD_SEARCH_GET_RESULT, 0, $this->_defaultOp, $query, $page);
$res = $this->execCommand($cmd, CMD_OK_RESULT_BEGIN);
$tmp = unpack('Icount', $res->buf);
$this->_lastCount = $tmp['count'];
// load vno map to name of fields
$ret = $this->_facets = array();
$vnoes = $this->xs->getScheme()->getVnoMap();
// get result documents
while (true) {
$res = $this->getRespond();
if ($res->cmd == CMD_SEARCH_RESULT_FACETS) {
$off = 0;
while (($off + 6) < strlen($res->buf)) {
$tmp = unpack('Cvno/Cvlen/Inum', substr($res->buf, $off, 6));
if (isset($vnoes[$tmp['vno']])) {
$name = $vnoes[$tmp['vno']];
$value = substr($res->buf, $off + 6, $tmp['vlen']);
if (!isset($this->_facets[$name])) {
$this->_facets[$name] = array();
}
$this->_facets[$name][$value] = $tmp['num'];
}
$off += $tmp['vlen'] + 6;
}
} elseif ($res->cmd == CMD_SEARCH_RESULT_DOC) {
// got new doc
$doc = new XSDocument($res->buf, $this->_charset);
$ret[] = $doc;
} elseif ($res->cmd == CMD_SEARCH_RESULT_FIELD) {
// fields of doc
if (isset($doc)) {
$name = isset($vnoes[$res->arg]) ? $vnoes[$res->arg] : $res->arg;
$doc->setField($name, $res->buf);
}
} elseif ($res->cmd == CMD_SEARCH_RESULT_MATCHED) {
// matched terms
if (isset($doc)) {
$doc->setField('matched', explode(' ', $res->buf), true);
}
} elseif ($res->cmd == CMD_OK && $res->arg == CMD_OK_RESULT_END) {
// got the end
break;
} else {
$msg = 'Unexpected respond in search {CMD:' . $res->cmd . ', ARG:' . $res->arg . '}';
throw new XSException($msg);
}
}
if ($query === '') {
$this->_count = $this->_lastCount;
// trigger log & highlight
if ($this->_curDb !== self::LOG_DB) {
$this->logQuery();
if ($saveHighlight) {
$this->initHighlight();
}
}
}
$this->_limit = $this->_offset = 0;
return $ret;
}`
获取匹配的搜索结果文档默认提取最匹配的前 self::PAGE_SIZE 个结果如需分页请参见 [setLimit](#) 设置, 每次调用本函数后都会还原 setLimit 的设置
setAutoSynonyms()方法(自版本 v1.3.0 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setAutoSynonyms</b>(bool $value=true)</div></td></tr><tr><td class="paramNameCol">$value</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">设为 true 表示开启同义词功能, 设为 false 关闭同义词功能</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L129](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L129) (**[显示](#)**)
`public function setAutoSynonyms($value = true)
{
$flag = CMD_PARSE_FLAG_BOOLEAN | CMD_PARSE_FLAG_PHRASE | CMD_PARSE_FLAG_LOVEHATE;
if ($value === true) {
$flag |= CMD_PARSE_FLAG_AUTO_MULTIWORD_SYNONYMS;
}
$cmd = array('cmd' => CMD_QUERY_PARSEFLAG, 'arg' => $flag);
$this->execCommand($cmd);
return $this;
}`
开启自动同义词搜索功能
setCharset()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setCharset</b>(string $charset)</div></td></tr><tr><td class="paramNameCol">$charset</td> <td class="paramTypeCol">string</td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L69](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L69) (**[显示](#)**)
`public function setCharset($charset)
{
$this->_charset = strtoupper($charset);
if ($this->_charset == 'UTF8') {
$this->_charset = 'UTF-8';
}
return $this;
}`
设置字符集默认字符集是 UTF-8, 如果您提交的搜索语句和预期得到的搜索结果为其它字符集, 请先设置
setCollapse()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setCollapse</b>(string $field, int $num=1)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">依据该字段的值折叠搜索结果, 设为 null 则取消折叠</td></tr><tr><td class="paramNameCol">$num</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">折叠后只是返最匹配的数据数量, 默认为 1, 最大值 255</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L314](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L314) (**[显示](#)**)
`public function setCollapse($field, $num = 1)
{
$vno = $field === null ? XSFieldScheme::MIXED_VNO : $this->xs->getField($field, true)->vno;
$max = min(255, intval($num));
$cmd = new XSCommand(CMD_SEARCH_SET_COLLAPSE, $max, $vno);
$this->execCommand($cmd);
return $this;
}`
设置折叠搜索结果注意, 每当调用 [setDb](#) 或 [addDb](#) 修改当前数据库时会重置此项设置
setCutOff()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setCutOff</b>(int $percent, float $weight=0)</div></td></tr><tr><td class="paramNameCol">$percent</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">剔除匹配百分比低于此值的文档, 值范围 0-100</td></tr><tr><td class="paramNameCol">$weight</td> <td class="paramTypeCol">float</td> <td class="paramDescCol">剔除权重低于此值的文档, 值范围 0.1-25.5, 0 表示不剔除</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L98](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L98) (**[显示](#)**)
`public function setCutOff($percent, $weight = 0)
{
$percent = max(0, min(100, intval($percent)));
$weight = max(0, (intval($weight * 10) & 255));
$cmd = new XSCommand(CMD_SEARCH_SET_CUTOFF, $percent, $weight);
$this->execCommand($cmd);
return $this;
}`
设置百分比/权重剔除参数通常是在开启 [setFuzzy](#) 或使用 OR 连接搜索语句时才需要设置此项
#### 参见
- [setFuzzy](#)
setDb()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setDb</b>(string $name)</div></td></tr><tr><td class="paramNameCol">$name</td> <td class="paramTypeCol">string</td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L457](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L457) (**[显示](#)**)
`public function setDb($name)
{
$name = strval($name);
$this->execCommand(array('cmd' => CMD_SEARCH_SET_DB, 'buf' => strval($name)));
$this->_lastDb = $this->_curDb;
$this->_lastDbs = $this->_curDbs;
$this->_curDb = $name;
$this->_curDbs = array();
return $this;
}`
设置要搜索的数据库名若未设置, 使用默认数据库, 数据库必须位于服务端用户目录下对于远程数据库, 请使用 stub 文件来支持
setDocOrder()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setDocOrder</b>(bool $asc=false)</div></td></tr><tr><td class="paramNameCol">$asc</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否为正序排列, 即从先到后, 默认为反序</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L299](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L299) (**[显示](#)**)
`public function setDocOrder($asc = false)
{
$type = CMD_SORT_TYPE_DOCID | ($asc ? CMD_SORT_FLAG_ASCENDING : 0);
$cmd = new XSCommand(CMD_SEARCH_SET_SORT, $type);
$this->execCommand($cmd);
return $this;
}`
设置结果按索引入库先后排序注意, 此项排序不影响相关排序, 权重高的仍会在前面, 主要适合用于布尔检索
setFacets()方法(自版本 v1.1.0 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setFacets</b>(mixed $field, bool $exact=false)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">mixed</td> <td class="paramDescCol">要进行分组统计的字段或字段组成的数组, 最多同时支持 8 个</td></tr><tr><td class="paramNameCol">$exact</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否要求绝对精确搜索, 这会造成较大的系统开销</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L383](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L383) (**[显示](#)**)
`public function setFacets($field, $exact = false)
{
$buf = '';
if (!is_array($field)) {
$field = array($field);
}
foreach ($field as $name) {
$ff = $this->xs->getField($name);
if ($ff->type !== XSFieldMeta::TYPE_STRING) {
throw new XSException("Field `$name' cann't be used for facets search, can only be string type");
}
$buf .= chr($ff->vno);
}
$cmd = array('cmd' => CMD_SEARCH_SET_FACETS, 'buf' => $buf);
$cmd['arg1'] = $exact === true ? 1 : 0;
$this->execCommand($cmd);
return $this;
}`
设置分面搜索记数用于记录匹配搜索结果中按字段值分组的数量统计, 每次调用 [search](#) 后会还原设置 对于多次调用 $exact 参数以最后一次为准, 只支持字段值不超过 255 字节的情况
setFuzzy()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setFuzzy</b>(bool $value=true)</div></td></tr><tr><td class="paramNameCol">$value</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">设为 true 表示开启模糊搜索, 设为 false 关闭模糊搜索</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L84](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L84) (**[显示](#)**)
`public function setFuzzy($value = true)
{
$this->_defaultOp = $value === true ? CMD_QUERY_OP_OR : CMD_QUERY_OP_AND;
return $this;
}`
开启模糊搜索默认情况只返回包含所有搜索词的记录, 通过本方法可以获得更多搜索结果
setLimit()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setLimit</b>(int $limit, int $offset=0)</div></td></tr><tr><td class="paramNameCol">$limit</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">数量上限, 若设为 0 则启用默认值 self::PAGE_SIZE</td></tr><tr><td class="paramNameCol">$offset</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">偏移量, 即跳过的结果数量, 默认为 0</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L443](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L443) (**[显示](#)**)
`public function setLimit($limit, $offset = 0)
{
$this->_limit = intval($limit);
$this->_offset = intval($offset);
return $this;
}`
设置搜索结果的数量和偏移用于搜索结果分页, 每次调用 [search](#) 后会还原这2个变量到初始值
setMultiSort()方法(自版本 v1.1.0 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setMultiSort</b>(array $fields, bool $reverse=false, bool $relevance_first=false)</div></td></tr><tr><td class="paramNameCol">$fields</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">排序依据的字段数组, 以字段名称为键, true/false 为值表示正序或逆序</td></tr><tr><td class="paramNameCol">$reverse</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否为倒序显示, 默认为正向, 此处和 <a href="XSSearch.html#setSort">setSort</a> 略有不同</td></tr><tr><td class="paramNameCol">$relevance_first</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否优先相关性排序, 默认为否</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L228](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L228) (**[显示](#)**)
`public function setMultiSort($fields, $reverse = false, $relevance_first = false)
{
if (!is_array($fields)) {
return $this->setSort($fields, !$reverse, $relevance_first);
}
// [vno][0/1] (0:reverse,1:asc)
$buf = '';
foreach ($fields as $key => $value) {
if (is_bool($value)) {
$vno = $this->xs->getField($key, true)->vno;
$asc = $value;
} else {
$vno = $this->xs->getField($value, true)->vno;
$asc = false;
}
if ($vno != XSFieldScheme::MIXED_VNO) {
$buf .= chr($vno) . chr($asc ? 1 : 0);
}
}
if ($buf !== '') {
$type = CMD_SORT_TYPE_MULTI;
if ($relevance_first) {
$type |= CMD_SORT_FLAG_RELEVANCE;
}
if (!$reverse) {
$type |= CMD_SORT_FLAG_ASCENDING;
}
$cmd = new XSCommand(CMD_SEARCH_SET_SORT, $type, 0, $buf);
$this->execCommand($cmd);
}
return $this;
}`
设置多字段组合排序方式当您需要根据多个字段的值按不同的方式综合排序时, 请使用这项
setQuery()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setQuery</b>(string $query)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 设为 null 则清空搜索语句, 最大长度为 80 字节</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L209](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L209) (**[显示](#)**)
`public function setQuery($query)
{
$this->clearQuery();
if ($query !== null) {
$this->_query = $query;
$this->addQueryString($query);
}
return $this;
}`
设置默认搜索语句用于不带参数的 [count](#) 或 [search](#) 以及 [terms](#) 调用可与 [addWeight](#) 组合运用
setRequireMatchedTerm()方法(自版本 v1.4.8 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setRequireMatchedTerm</b>(bool $value=true)</div></td></tr><tr><td class="paramNameCol">$value</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">设为 true 表示开启返回, 设为 false 关闭该功能, 默认是不开启</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L114](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L114) (**[显示](#)**)
`public function setRequireMatchedTerm($value = true)
{
$arg1 = CMD_SEARCH_MISC_MATCHED_TERM;
$arg2 = $value === true ? 1 : 0;
$cmd = new XSCommand(CMD_SEARCH_SET_MISC, $arg1, $arg2);
$this->execCommand($cmd);
return $this;
}`
设置在搜索结果文档中返回匹配词表请在 [search](#) 前调用本方法, 然后使用 XSDocument::matched 获取
setScwsMulti()方法(自版本 v1.4.7 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setScwsMulti</b>(int $level)</div></td></tr><tr><td class="paramNameCol">$level</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">要设置的分词复合等级</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L426](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L426) (**[显示](#)**)
`public function setScwsMulti($level)
{
$level = intval($level);
if ($level >= 0 && $level < 16) {
$cmd = array('cmd' => CMD_SEARCH_SCWS_SET, 'arg1' => CMD_SCWS_SET_MULTI, 'arg2' => $level);
$this->execCommand($cmd);
}
return $this;
}`
设置当前搜索语句的分词复合等级复合等级是 scws 分词粒度控制的一个重要参数, 是长词细分处理依据, 默认为 3, 值范围 0~15注意: 这个设置仅直对本次搜索有效, 仅对设置之后的 [setQuery](#) 起作用, 由于 query设计的方式问题, 目前无法支持搜索语句单字切分, 但您可以在模糊检索时设为 0 来关闭复合分词
setSort()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setSort</b>(string $field, bool $asc=false, bool $relevance_first=false)</div></td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">依据指定字段的值排序, 设为 null 则用默认顺序</td></tr><tr><td class="paramNameCol">$asc</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否为正序排列, 即从小到大, 从少到多, 默认为反序</td></tr><tr><td class="paramNameCol">$relevance_first</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否优先相关性排序, 默认为否</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L271](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L271) (**[显示](#)**)
`public function setSort($field, $asc = false, $relevance_first = false)
{
if (is_array($field)) {
return $this->setMultiSort($field, $asc, $relevance_first);
}
if ($field === null) {
$cmd = new XSCommand(CMD_SEARCH_SET_SORT, CMD_SORT_TYPE_RELEVANCE);
} else {
$type = CMD_SORT_TYPE_VALUE;
if ($relevance_first) {
$type |= CMD_SORT_FLAG_RELEVANCE;
}
if ($asc) {
$type |= CMD_SORT_FLAG_ASCENDING;
}
$vno = $this->xs->getField($field, true)->vno;
$cmd = new XSCommand(CMD_SEARCH_SET_SORT, $type, $vno);
}
$this->execCommand($cmd);
return $this;
}`
设置搜索结果的排序方式注意, 每当调用 [setDb](#) 或 [addDb](#) 修改当前数据库时会重置排序设定此函数第一参数的用法与 [setMultiSort](#) 兼容, 即也可以用该方法实现多字段排序
setSynonymScale()方法(自版本 v1.4.7 起可用)
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSSearch <b>setSynonymScale</b>(float $value)</div></td></tr><tr><td class="paramNameCol">$value</td> <td class="paramTypeCol">float</td> <td class="paramDescCol">取值范围 0.01-2.55, 1 表示不调整</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSSearch</td> <td class="paramDescCol">返回对象本身以支持串接操作</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L147](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L147) (**[显示](#)**)
`public function setSynonymScale($value)
{
$arg1 = CMD_SEARCH_MISC_SYN_SCALE;
$arg2 = max(0, (intval($value * 100) & 255));
$cmd = new XSCommand(CMD_SEARCH_SET_MISC, $arg1, $arg2);
$this->execCommand($cmd);
return $this;
}`
设置同义词搜索的权重比例
terms()方法
<table class="summaryTable"><tr><td colspan="3"><div class="signature2">public array <b>terms</b>(string $query=NULL, bool $convert=true)</div></td></tr><tr><td class="paramNameCol">$query</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">搜索语句, 若传入 null 使用默认语句, 最大长度为 80 字节</td></tr><tr><td class="paramNameCol">$convert</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否进行编码转换, 默认为 true</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">array</td> <td class="paramDescCol">可用于高亮显示的词条列表</td></tr></table>
**源码:**[sdk/php/lib/XSSearch.class.php#L497](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSSearch.class.php#L497) (**[显示](#)**)
`public function terms($query = null, $convert = true)
{
$query = $query === null ? '' : $this->preQueryString($query);
if ($query === '' && $this->_terms !== null) {
$ret = $this->_terms;
} else {
$cmd = new XSCommand(CMD_QUERY_GET_TERMS, 0, $this->_defaultOp, $query);
$res = $this->execCommand($cmd, CMD_OK_QUERY_TERMS);
$ret = array();
$tmps = explode(' ', $res->buf);
for ($i = 0; $i < count($tmps); $i++) {
if ($tmps[$i] === '' || strpos($tmps[$i], ':') !== false) {
continue;
}
$ret[] = $tmps[$i];
}
if ($query === '') {
$this->_terms = $ret;
}
}
return $convert ? XS::convert($ret, $this->_charset, 'UTF-8') : $ret;
}`
获取搜索语句中的高亮词条列表
Copyright © 2008-2011 by [杭州云圣网络科技有限公司](http://www.xunsearch.com)
All Rights Reserved.
- 权威指南
- 新手上路
- 最新主要变动
- 概述
- 关于 Xunsearch PHP-SDK
- 安装、升级
- 体验 demo 项目
- 开发规范
- 开发流程
- 了解基础对象
- 基础对象概述
- XS 项目
- XSException 异常
- XSDocument 文档
- XSIndex 索引管理
- XSSearch 搜索
- XSTokenizer 分词接口
- 编写项目配置文件
- 项目配置详解
- 自定义分词器
- 编写第一个配置文件
- 管理索引
- 索引概述
- 添加文档
- 更新、修改文档
- 删除文档
- 清空索引
- 平滑重建索引
- 使用索引缓冲区
- 自定义SCWS词库
- 使用搜索
- 搜索概述
- 构建搜索语句
- 获取搜索匹配结果
- 获取搜索匹配数量
- 获取热门搜索词
- 获取相关搜索词
- 搜索建议和纠错
- 按字段值分面搜索
- 使用辅助工具
- RequiredCheck 运行检测
- Indexer 索引管理器
- Quest 搜索测试工具
- SearchSkel 生成搜索代码
- IniWizzard 配置文件向导
- Logger 搜索日志管理
- 专题
- 同义词搜索功能
- 在SDK中使用SCWS分词
- API 指南
- XS
- XS
- XSCommand
- XSComponent
- XSDocument
- XSErrorException
- XSException
- XSFieldMeta
- XSFieldScheme
- XSIndex
- XSSearch
- XSServer
- XS.tokenizer
- XSTokenizer
- XSTokenizerFull
- XSTokenizerNone
- XSTokenizerScws
- XSTokenizerSplit
- XSTokenizerXlen
- XSTokenizerXstep
- XS.util
- XSCsvDataSource
- XSDataFilter
- XSDatabaseDataSource
- XSDebugFilter
- XSJsonDataSource
- XSUtil
- XS.util.db
- XSDatabase
- XSDatabaseMySQL
- XSDatabaseMySQLI
- XSDatabasePDO
- XSDatabasePDO_MySQL
- XSDatabasePDO_PgSQL
- XSDatabasePDO_SQLite
- XSDatabasePgSQL
- XSDatabaseSQLite
- XSDatabaseSQLite3
- XS.utilf
- XSDataSource
- 其它文档
- 关于 xunsearch
- 特色和优势
- Xunsearch 架构简图
- 下载 Xunsearch
- 商业服务与支持
- XunSearch 授权许可证