ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[Xunsearch PHP-SDK](http://www.xunsearch.com) v1.4.8 API 参考文档 # XSIndex [All Packages](#)| [属性](#)| [方法(函数)](#) | 包 | [XS](#) | |-----|-----| | 继承关系 | class XSIndex »[XSServer](#) »[XSComponent](#) | | 版本 | 1.0.0 | | 源代码 | [sdk/php/lib/XSIndex.class.php](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php) | XS 索引管理添加/删除/修改索引数据 ### Public 属性 [隐去继承来的属性](#) | 名称 | 类型 | 描述 | 定义于 | |-----|-----|-----|-----| | [connString](#) | string | 连接字符串 | [XSServer](#) | | [customDict](#) | string | 获取自定义词典内容 | XSIndex | | [project](#) | string | 获取当前项目名称 | [XSServer](#) | | [respond](#) | [XSCommand](#) | 从服务器读取响应指令 | [XSServer](#) | | [scwsMulti](#) | int | 获取当前索引库的分词复合等级 | XSIndex | | [socket](#) | mixed | 获取连接资源描述符 | [XSServer](#) | | [xs](#) | [XS](#) | 服务端关联的 XS 对象 | [XSServer](#) | ### Protected 属性 [隐去继承来的属性](#) | 名称 | 类型 | 描述 | 定义于 | |-----|-----|-----|-----| | [_conn](#) | | | [XSServer](#) | | [_flag](#) | | | [XSServer](#) | | [_project](#) | | | [XSServer](#) | | [_sendBuffer](#) | | | [XSServer](#) | | [_sock](#) | | | [XSServer](#) | ### Public 方法 [隐去继承来的方法](#) | 名称 | 描述 | 定义于 | |-----|-----|-----| | [__construct()](#) | 构造函数, 打开连接 | [XSServer](#) | | [__destruct()](#) | 析构函数 | XSIndex | | [__get()](#) | 魔术方法 __get | [XSComponent](#) | | [__isset()](#) | 魔术方法 __isset | [XSComponent](#) | | [__set()](#) | 魔术方法 __set | [XSComponent](#) | | [__unset()](#) | 魔术方法 __unset | [XSComponent](#) | | [add()](#) | 添加文档到索引中 | XSIndex | | [addExdata()](#) | 批量提交索引命令封包数据 | XSIndex | | [addServer()](#) | 增加一个同步索引服务器 | XSIndex | | [addSynonym()](#) | 添加同义词 | XSIndex | | [beginRebuild()](#) | 开始重建索引 | XSIndex | | [clean()](#) | 完全清空索引数据 | XSIndex | | [close()](#) | 关闭索引服务端连接 | XSIndex | | [closeBuffer()](#) | 提交所有指令并关闭缓冲区 | XSIndex | | [del()](#) | 删除索引中的数据 | XSIndex | | [delSynonym()](#) | 删除某个同义词 | XSIndex | | [endRebuild()](#) | 完成并关闭重建索引 | XSIndex | | [execCommand()](#) | 执行服务端指令并获取返回值 | XSIndex | | [flushIndex()](#) | 强制刷新服务端的当前库的索引缓存 | XSIndex | | [flushLogging()](#) | 强制刷新服务端当前项目的搜索日志 | XSIndex | | [getConnString()](#) | Returns 连接字符串 | [XSServer](#) | | [getCustomDict()](#) | 获取自定义词典内容 | XSIndex | | [getProject()](#) | 获取当前项目名称 | [XSServer](#) | | [getRespond()](#) | 从服务器读取响应指令 | [XSServer](#) | | [getScwsMulti()](#) | 获取当前索引库的分词复合等级 | XSIndex | | [getSocket()](#) | 获取连接资源描述符 | [XSServer](#) | | [hasRespond()](#) | 判断服务端是否有可读数据 | [XSServer](#) | | [open()](#) | 打开服务端连接 | [XSServer](#) | | [openBuffer()](#) | 开启索引命令提交缓冲区 | XSIndex | | [reopen()](#) | 重新打开连接 | [XSServer](#) | | [sendCommand()](#) | 往服务器直接发送指令 (无缓存) | [XSServer](#) | | [setCustomDict()](#) | 设置自定义词典内容 | XSIndex | | [setDb()](#) | 更改存放索引数据的目录 | XSIndex | | [setProject()](#) | 设置当前项目 | [XSServer](#) | | [setScwsMulti()](#) | 设置当前索引库的分词复合等级 | XSIndex | | [setTimeout()](#) | 设置服务端超时秒数 | [XSServer](#) | | [stopRebuild()](#) | 中止索引重建 | XSIndex | | [update()](#) | 更新索引文档 | XSIndex | ### Protected 方法 [隐去继承来的方法](#) | 名称 | 描述 | 定义于 | |-----|-----|-----| | [check()](#) | 检测服务端的连接情况 | [XSServer](#) | | [connect()](#) | 连接服务端 | [XSServer](#) | | [read()](#) | 读取数据 | [XSServer](#) | | [write()](#) | 写入数据 | [XSServer](#) | ### 属性明细 customDict属性 public string [**getCustomDict**](#)() public void [**setCustomDict**](#)(string $content) 获取自定义词典内容 scwsMulti属性 (自版本 v1.4.7 起可用) public int [**getScwsMulti**](#)() public XSIndex [**setScwsMulti**](#)(int $level) 获取当前索引库的分词复合等级 #### 参见 - [setScwsMulti](#) ### 方法明细 __destruct()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>__destruct</b>()</div></td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L528](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L528) (**[显示](#)**) `public function __destruct() {     if ($this->_rebuild === true) {         try {             $this->endRebuild();         } catch (Exception $e) {                      }     }     foreach (self::$_adds as $srv) {         $srv->close();     }     self::$_adds = array();     parent::__destruct(); }` 析构函数在此自动关闭开启的 rebuild add()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>add</b>(<a href="XSDocument.html">XSDocument</a> $doc)</div></td></tr><tr><td class="paramNameCol">$doc</td> <td class="paramTypeCol"><a href="XSDocument.html">XSDocument</a></td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L72](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L72) (**[显示](#)**) `public function add(XSDocument $doc) {     return $this->update($doc, true); }` 添加文档到索引中特别要注意的是: 系统不会自动检测主键是否冲突, 即便已存在相同主键也会添加进去 #### 参见 - [update](#) addExdata()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>addExdata</b>(string $data, bool $check_file=true)</div></td></tr><tr><td class="paramNameCol">$data</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">要提交的命令封包数据, 或存储命令封包的文件路径, 编码必须已经是 UTF-8</td></tr><tr><td class="paramNameCol">$check_file</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否检测参数为文件的情况</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L253](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L253) (**[显示](#)**) `public function addExdata($data, $check_file = true) {     if (strlen($data) < 255 && $check_file             && file_exists($data) && ($data = file_get_contents($data)) === false) {         throw new XSException('Failed to read exdata from file');     }     // try to check allowed (BUG: check the first cmd only):     // CMD_IMPORT_HEADER, CMD_INDEX_REQUEST, CMD_INDEX_REMOVE, CMD_INDEX_EXDATA     $first = ord(substr($data, 0, 1));     if ($first != CMD_IMPORT_HEADER             && $first != CMD_INDEX_REQUEST && $first != CMD_INDEX_SYNONYMS             && $first != CMD_INDEX_REMOVE && $first != CMD_INDEX_EXDATA) {         throw new XSException('Invalid start command of exdata (CMD:' . $first . ')');     }     // create cmd & execute it     $cmd = array('cmd' => CMD_INDEX_EXDATA, 'buf' => $data);     $this->execCommand($cmd, CMD_OK_RQST_FINISHED);     return $this; }` 批量提交索引命令封包数据把多个命令封包内容连续保存为文件或变量, 然后一次性提交以减少网络开销提升性能 addServer()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public <a href="XSServer.html">XSServer</a> <b>addServer</b>(string $conn)</div></td></tr><tr><td class="paramNameCol">$conn</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引服务端连接参数</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol"><a href="XSServer.html">XSServer</a></td> <td class="paramDescCol"></td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L33](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L33) (**[显示](#)**) `public function addServer($conn) {     $srv = new XSServer($conn, $this->xs);     self::$_adds[] = $srv;     return $srv; }` 增加一个同步索引服务器 addSynonym()方法(自版本 v1.3.0 起可用) <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>addSynonym</b>(string $raw, string $synonym)</div></td></tr><tr><td class="paramNameCol">$raw</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要同义的原词, 英文词汇支持用空格分开多个单词并强制被转换为小写</td></tr><tr><td class="paramNameCol">$synonym</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">同义词条, 最小语素, 勿带空格等分隔符</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L283](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L283) (**[显示](#)**) `public function addSynonym($raw, $synonym) {     $raw = strval($raw);     $synonym = strval($synonym);     if ($raw !== '' && $synonym !== '') {         $cmd = new XSCommand(CMD_INDEX_SYNONYMS, CMD_INDEX_SYNONYMS_ADD, 0, $raw, $synonym);         if ($this->_bufSize > 0) {             $this->appendBuffer(strval($cmd));         } else {             $this->execCommand($cmd, CMD_OK_RQST_FINISHED);         }     }     return $this; }` 添加同义词 beginRebuild()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>beginRebuild</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L391](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L391) (**[显示](#)**) `public function beginRebuild() {     $this->execCommand(array('cmd' => CMD_INDEX_REBUILD, 'arg1' => 0), CMD_OK_DB_REBUILD);     $this->_rebuild = true;     return $this; }` 开始重建索引此后所有的索引更新指令将写到临时库, 而不是当前搜索库, 重建完成后调用[endRebuild](#) 实现平滑重建索引, 重建过程仍可搜索旧的索引库,如直接用 [clean](#) 清空数据, 则会导致重建过程搜索到不全的数据 #### 参见 - [endRebuild](#) clean()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>clean</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L59](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L59) (**[显示](#)**) `public function clean() {     $this->execCommand(CMD_INDEX_CLEAN_DB, CMD_OK_DB_CLEAN);     return $this; }` 完全清空索引数据如果当前数据库处于重建过程中将禁止清空 #### 参见 - [beginRebuild](#) close()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>close</b>($ioerr=false)</div></td></tr><tr><td class="paramNameCol">$ioerr</td> <td class="paramTypeCol"></td> <td class="paramDescCol"></td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L504](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L504) (**[显示](#)**) `public function close($ioerr = false) {     $this->closeBuffer();     parent::close($ioerr); }` 关闭索引服务端连接 closeBuffer()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>closeBuffer</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L378](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L378) (**[显示](#)**) `public function closeBuffer() {     return $this->openBuffer(0); }` 提交所有指令并关闭缓冲区若未曾打开缓冲区, 调用本方法是无意义的 #### 参见 - [openBuffer](#) del()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>del</b>(mixed $term, string $field=NULL)</div></td></tr><tr><td class="paramNameCol">$term</td> <td class="paramTypeCol">mixed</td> <td class="paramDescCol">单个主键或指定字段的索引词, 或多个组成的数组, 编码与 <a href="XSIndex.html#xs">xs</a> 默认字符集一致</td></tr><tr><td class="paramNameCol">$field</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">索引词所属的字段名称, 默认不指定则为主键字段 (类型为ID)</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L220](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L220) (**[显示](#)**) `public function del($term, $field = null) {     // get field     $field = $field === null ? $this->xs->getFieldId() : $this->xs->getField($field);     // get commands     $cmds = array();     $terms = is_array($term) ? array_unique($term) : array($term);     $terms = XS::convert($terms, 'UTF-8', $this->xs->getDefaultCharset());     foreach ($terms as $term) {         $cmds[] = new XSCommand(CMD_INDEX_REMOVE, 0, $field->vno, strtolower($term));     }     // combine multi commands into exdata     if ($this->_bufSize > 0) {         $this->appendBuffer(implode('', $cmds));     } elseif (count($cmds) == 1) {         $this->execCommand($cmds[0], CMD_OK_RQST_FINISHED);     } else {         $cmd = array('cmd' => CMD_INDEX_EXDATA, 'buf' => implode('', $cmds));         $this->execCommand($cmd, CMD_OK_RQST_FINISHED);     }     return $this; }` 删除索引中的数据 ~~~ $index->del('123'); // 删除主键为 123 的记录 $index->del(array('123', '789', '456')); // 删除主键为 123, 789, 456 的记录 $index->del('abc', 'field'); // 删除字段 field 上带有索引词 abc 的所有记录 $index->del(array('abc', 'def'), 'field'); // 删除字段 field 上带有索引词 abc 或 def 的所有记录 ~~~ delSynonym()方法(自版本 v1.3.0 起可用) <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>delSynonym</b>(string $raw, string $synonym=NULL)</div></td></tr><tr><td class="paramNameCol">$raw</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">需要同义的原词, 英文词汇支持用空格分开多个单词并强制被转换为小写</td></tr><tr><td class="paramNameCol">$synonym</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">要删除的同义词条, 默认 null 表示删除原词下的所有同义词</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L306](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L306) (**[显示](#)**) `public function delSynonym($raw, $synonym = null) {     $raw = strval($raw);     $synonym = $synonym === null ? '' : strval($synonym);     if ($raw !== '') {         $cmd = new XSCommand(CMD_INDEX_SYNONYMS, CMD_INDEX_SYNONYMS_DEL, 0, $raw, $synonym);         if ($this->_bufSize > 0) {             $this->appendBuffer(strval($cmd));         } else {             $this->execCommand($cmd, CMD_OK_RQST_FINISHED);         }     }     return $this; }` 删除某个同义词 endRebuild()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>endRebuild</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L404](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L404) (**[显示](#)**) `public function endRebuild() {     if ($this->_rebuild === true) {         $this->_rebuild = false;         $this->execCommand(array('cmd' => CMD_INDEX_REBUILD, 'arg1' => 1), CMD_OK_DB_REBUILD);     }     return $this; }` 完成并关闭重建索引重建完成后调用, 用重建好的索引数据代替旧的索引数据 #### 参见 - [beginRebuild](#) execCommand()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>execCommand</b>($cmd, $res_arg=0, $res_cmd=128)</div></td></tr><tr><td class="paramNameCol">$cmd</td> <td class="paramTypeCol"></td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">$res_arg</td> <td class="paramTypeCol"></td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">$res_cmd</td> <td class="paramTypeCol"></td> <td class="paramDescCol"></td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L44](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L44) (**[显示](#)**) `public function execCommand($cmd, $res_arg = CMD_NONE, $res_cmd = CMD_OK) {     $res = parent::execCommand($cmd, $res_arg, $res_cmd);     foreach (self::$_adds as $srv) {         $srv->execCommand($cmd, $res_arg, $res_cmd);     }     return $res; }` 执行服务端指令并获取返回值重写此方法是为了同步到额外增加的多个索引服务端 flushIndex()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public bool <b>flushIndex</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">刷新成功返回 true, 失败则返回 false</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L466](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L466) (**[显示](#)**) `public function flushIndex() {     try {         $this->execCommand(CMD_INDEX_COMMIT, CMD_OK_DB_COMMITED);     } catch (XSException $e) {         if ($e->getCode() === CMD_ERR_BUSY || $e->getCode() === CMD_ERR_RUNNING) {             return false;         }         throw $e;     }     return true; }` 强制刷新服务端的当前库的索引缓存 flushLogging()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public bool <b>flushLogging</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">刷新成功返回 true, 失败则返回 false</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L449](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L449) (**[显示](#)**) `public function flushLogging() {     try {         $this->execCommand(CMD_FLUSH_LOGGING, CMD_OK_LOG_FLUSHED);     } catch (XSException $e) {         if ($e->getCode() === CMD_ERR_BUSY) {             return false;         }         throw $e;     }     return true; }` 强制刷新服务端当前项目的搜索日志 getCustomDict()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public string <b>getCustomDict</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">自定义词库内容</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L484](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L484) (**[显示](#)**) `public function getCustomDict() {     $res = $this->execCommand(CMD_INDEX_USER_DICT, CMD_OK_INFO);     return $res->buf; }` 获取自定义词典内容 getScwsMulti()方法(自版本 v1.4.7 起可用) <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public int <b>getScwsMulti</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">返回当前库的分词复合等级</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L347](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L347) (**[显示](#)**) `public function getScwsMulti() {     $cmd = array('cmd' => CMD_SEARCH_SCWS_GET, 'arg1' => CMD_SCWS_GET_MULTI);     $res = $this->execCommand($cmd, CMD_OK_INFO);     return intval($res->buf); }` 获取当前索引库的分词复合等级 #### 参见 - [setScwsMulti](#) openBuffer()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>openBuffer</b>(int $size=4)</div></td></tr><tr><td class="paramNameCol">$size</td> <td class="paramTypeCol">int</td> <td class="paramDescCol">缓冲区大小, 单位: MB 默认为 4MB</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L362](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L362) (**[显示](#)**) `public function openBuffer($size = 4) {     if ($this->_buf !== '') {         $this->addExdata($this->_buf, false);     }     $this->_bufSize = intval($size) << 20;     $this->_buf = '';     return $this; }` 开启索引命令提交缓冲区为优化网络性能, 有必要先将本地提交的 add/update/del 等索引变动指令缓存下来, 当总大小达到参数指定的 size 时或调用 [closeBuffer](#) 时再真正提交到服务器注意: 此举常用于需要大批量更新索引时, 此外重复调用本函数是无必要的 setCustomDict()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public void <b>setCustomDict</b>(string $content)</div></td></tr><tr><td class="paramNameCol">$content</td> <td class="paramTypeCol">string</td> <td class="paramDescCol">新的词典内容</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L495](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L495) (**[显示](#)**) `public function setCustomDict($content) {     $cmd = array('cmd' => CMD_INDEX_USER_DICT, 'arg1' => 1, 'buf' => $content);     $this->execCommand($cmd, CMD_OK_DICT_SAVED); }` 设置自定义词典内容 setDb()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <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">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L439](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L439) (**[显示](#)**) `public function setDb($name) {     $this->execCommand(array('cmd' => CMD_INDEX_SET_DB, 'buf' => $name), CMD_OK_DB_CHANGED);     return $this; }` 更改存放索引数据的目录默认索引数据保存到服务器上的 db 目录, 通过此方法修改数据目录名 setScwsMulti()方法(自版本 v1.4.7 起可用) <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <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">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L331](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L331) (**[显示](#)**) `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注意: 这个设置仅直对当前索引库有效, 多次调用设置值被覆盖仅最后那次设置有效,而且仅对设置之后提交的索引数据起作用, 如需对以前的索引数据生效请重建索引. stopRebuild()方法(自版本 v1.3.4 起可用) <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>stopRebuild</b>()</div></td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L420](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L420) (**[显示](#)**) `public function stopRebuild() {     try {         $this->execCommand(array('cmd' => CMD_INDEX_REBUILD, 'arg1' => 2), CMD_OK_DB_REBUILD);         $this->_rebuild = false;     } catch (XSException $e) {         if ($e->getCode() !== CMD_ERR_WRONGPLACE) {             throw $e;         }     }     return $this; }` 中止索引重建丢弃重建临时库的所有数据, 恢复成当前搜索库, 主要用于偶尔重建意外中止的情况 #### 参见 - [beginRebuild](#) update()方法 <table class="summaryTable"><tr><td colspan="3"><div class="signature2">public XSIndex <b>update</b>(<a href="XSDocument.html">XSDocument</a> $doc, bool $add=false)</div></td></tr><tr><td class="paramNameCol">$doc</td> <td class="paramTypeCol"><a href="XSDocument.html">XSDocument</a></td> <td class="paramDescCol"></td></tr><tr><td class="paramNameCol">$add</td> <td class="paramTypeCol">bool</td> <td class="paramDescCol">是否为新增文档, 已有数据中不存在同一主键的其它数据</td></tr><tr><td class="paramNameCol">{return}</td> <td class="paramTypeCol">XSIndex</td> <td class="paramDescCol">返回自身对象以支持串接操作</td></tr></table> **源码:**[sdk/php/lib/XSIndex.class.php#L85](https://github.com/hightman/xunsearch/blob/master/sdk/php/lib/XSIndex.class.php#L85) (**[显示](#)**) `public function update(XSDocument $doc, $add = false) {     // before submit     if ($doc->beforeSubmit($this) === false) {         return $this;     }     // check primary key of document     $fid = $this->xs->getFieldId();     $key = $doc->f($fid);     if ($key === null || $key === '') {         throw new XSException('Missing value of primary key (FIELD:' . $fid . ')');     }     // request cmd     $cmd = new XSCommand(CMD_INDEX_REQUEST, CMD_INDEX_REQUEST_ADD);     if ($add !== true) {         $cmd->arg1 = CMD_INDEX_REQUEST_UPDATE;         $cmd->arg2 = $fid->vno;         $cmd->buf = $key;     }     $cmds = array($cmd);     // document cmds     foreach ($this->xs->getAllFields() as $field) /* @var $field XSFieldMeta */ {         // value         if (($value = $doc->f($field)) !== null) {             $varg = $field->isNumeric() ? CMD_VALUE_FLAG_NUMERIC : 0;             $value = $field->val($value);             if (!$field->hasCustomTokenizer()) {                 // internal tokenizer                 $wdf = $field->weight | ($field->withPos() ? CMD_INDEX_FLAG_WITHPOS : 0);                 if ($field->hasIndexMixed()) {                     $cmds[] = new XSCommand(CMD_DOC_INDEX, $wdf, XSFieldScheme::MIXED_VNO, $value);                 }                 if ($field->hasIndexSelf()) {                     $wdf |= $field->isNumeric() ? 0 : CMD_INDEX_FLAG_SAVEVALUE;                     $cmds[] = new XSCommand(CMD_DOC_INDEX, $wdf, $field->vno, $value);                 }                 // add value                 if (!$field->hasIndexSelf() || $field->isNumeric()) {                     $cmds[] = new XSCommand(CMD_DOC_VALUE, $varg, $field->vno, $value);                 }             } else {                 // add index                 if ($field->hasIndex()) {                     $terms = $field->getCustomTokenizer()->getTokens($value, $doc);                     // self: [bool term, NOT weight, NOT stem, NOT pos]                     if ($field->hasIndexSelf()) {                         $wdf = $field->isBoolIndex() ? 1 : ($field->weight | CMD_INDEX_FLAG_CHECKSTEM);                         foreach ($terms as $term) {                             if (strlen($term) > 200) {                                 continue;                             }                             $term = strtolower($term);                             $cmds[] = new XSCommand(CMD_DOC_TERM, $wdf, $field->vno, $term);                         }                     }                     // mixed: [use default tokenizer]                     if ($field->hasIndexMixed()) {                         $mtext = implode(' ', $terms);                         $cmds[] = new XSCommand(CMD_DOC_INDEX, $field->weight, XSFieldScheme::MIXED_VNO, $mtext);                     }                 }                 // add value                 $cmds[] = new XSCommand(CMD_DOC_VALUE, $varg, $field->vno, $value);             }         }         // process add terms         if (($terms = $doc->getAddTerms($field)) !== null) {             // ignore weight for bool index             $wdf1 = $field->isBoolIndex() ? 0 : CMD_INDEX_FLAG_CHECKSTEM;             foreach ($terms as $term => $wdf) {                 $term = strtolower($term);                 if (strlen($term) > 200) {                     continue;                 }                 $wdf2 = $field->isBoolIndex() ? 1 : $wdf * $field->weight;                 while ($wdf2 > XSFieldMeta::MAX_WDF) {                     $cmds[] = new XSCommand(CMD_DOC_TERM, $wdf1 | XSFieldMeta::MAX_WDF, $field->vno, $term);                     $wdf2 -= XSFieldMeta::MAX_WDF;                 }                 $cmds[] = new XSCommand(CMD_DOC_TERM, $wdf1 | $wdf2, $field->vno, $term);             }         }         // process add text         if (($text = $doc->getAddIndex($field)) !== null) {             if (!$field->hasCustomTokenizer()) {                 $wdf = $field->weight | ($field->withPos() ? CMD_INDEX_FLAG_WITHPOS : 0);                 $cmds[] = new XSCommand(CMD_DOC_INDEX, $wdf, $field->vno, $text);             } else {                 // NOT pos                 $wdf = $field->isBoolIndex() ? 1 : ($field->weight | CMD_INDEX_FLAG_CHECKSTEM);                 $terms = $field->getCustomTokenizer()->getTokens($text, $doc);                 foreach ($terms as $term) {                     if (strlen($term) > 200) {                         continue;                     }                     $term = strtolower($term);                     $cmds[] = new XSCommand(CMD_DOC_TERM, $wdf, $field->vno, $term);                 }             }         }     }     // submit cmd     $cmds[] = new XSCommand(CMD_INDEX_SUBMIT);     // execute cmd     if ($this->_bufSize > 0) {         $this->appendBuffer(implode('', $cmds));     } else {         for ($i = 0; $i < count($cmds) - 1; $i++) {             $this->execCommand($cmds[$i]);         }         $this->execCommand($cmds[$i], CMD_OK_RQST_FINISHED);     }     // after submit     $doc->afterSubmit($this);     return $this; }` 更新索引文档该方法相当于先根据主键删除已存在的旧文档, 然后添加该文档如果你能明确认定是新文档, 则建议使用 [add](#) Copyright © 2008-2011 by [杭州云圣网络科技有限公司](http://www.xunsearch.com) All Rights Reserved.