PHP code example of hightman / xunsearch

1. Go to this page and download the library: Download hightman/xunsearch library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

hightman / xunsearch example snippets


// 加载 vendor 的 autoload 文件
文件目录为 vendor/hightman/xunsearch/app
// 如有必要,请通过常量 XS_APP_ROOT 定义
define ('XS_APP_ROOT', '/path/to/ini')

// 创建 XS 对象,关于项目配置文件请参见官网
$xs = new \XS('demo');

// 后面的代码就和官网上的指南一致了


// 如有必要请定义常量 XS_APP_ROOT 表示项目文件存放路径
//define ('XS_APP_ROOT', dirname(__FILE__) . '/protected/data');

    // application components
    'components' => array(
        // ... other components ... 
        'search' => array(
            'class' => 'EXunSearch',
            'project' => 'demo', // 搜索项目名称或对应的 ini 文件路径
            'charset' => 'utf-8', // 您当前使用的字符集(索引、搜索结果)
        ),  
    ),  

$data = array('pid' => 1234, 'subject' => '标题', 'message' => '内容');
Yii::app()->search->add($data);	// 添加文档
Yii::app()->search->update($data);	// 更新文档
Yii::app()->search->del('1234');	// 删除文档

Yii::app()->search->setQuery('subject:标题');
$docs = Yii::app()->search->setLimit(5, 10)->search();	// 取得搜索结果文档集

	// application components
	'components => [
		// ... other components ...
		'xunsearch' => [
			'class' => 'hightman\xunsearch\Connection',	// 此行必须
			'iniDirectory' => '@app/config',	// 搜索 ini 文件目录,默认:@vendor/hightman/xunsearch/app
			'charset' => 'utf-8',	// 指定项目使用的默认编码,默认即时 utf-8,可不指定
		],
	],

$db = \Yii::$app->xunsearch->getDatabase('demo');
$db = (\Yii::$app->xunsearch)('demo');
$xs = $db->xs;
$search = $db->getSearch();
$index = $db->getIndex();

class Demo extends \hightman\xunsearch\ActiveRecord
{
    /*public static function projectName() {
        return 'another_name';	// 这将使用 @app/config/another_name.ini 作为项目名
    }*/
}

// 添加索引,也可以通过 $model->setAttributes([...]) 批量赋值
$model = new Demo;
$model->pid = 321;
$model->subject = 'hello world';
$model->message = 'just for testing...';
$model->save();

// 更新索引
$model = Demo::findOne(321);
$model->message .= ' + updated';
$model->save();


// 添加或更新索引还支持以方法添加索引词或文本
// 这样做的目的是使得可以通过这些关键词检索到数据,但并非数据的字段值
// 用法与 XSDocument::addTerm() 和 XSDocument::addIndex() 等同
// 通常在 ActiveRecord::beforeSave() 中做这些操作
$model->addTerm('subject', 'hi');
$model->addIndex('subject', '你好,世界');

// 如需删除数据则可直接
$model->delete();


$query = Demo::find(); // 返回 ActiveQuery 对象
$condition = 'hello world';	// 字符串原样保持,可包含 subject:xxx 这种形式
$condition = ['WILD', 'key1', 'key2' ... ];	// 通过空格将多个查询条件连接
$condition = ['AND', 'key1', 'key2' ... ]; // 通过 AND 连接,转换为:key1 AND key2
$condition = ['OR', 'key1', 'key2' ... ]; // 通过 OR 连接
$condition = ['XOR', 'key1', 'key2' ... ]; // 通过  XOR 连接
$condition = ['NOT', 'key']; // 排除匹配 key 的结果
$condition = ['pid' => '123', 'subject' => 'hello']; // 转换为:pid:123 subject:hello
$condition = ['pid' => ['123', '456']]; // 相当于 IN,转换为:pid:123 OR pid:456
$condition = ['IN', 'pid', ['123', '456']]; // 转换结果同上
$condition = ['NOT IN', 'pid', ['123', '456']]; // 转换为:NOT (pid:123 OR pid:456)
$condition = ['BETWEEN', 'chrono', 14918161631, 15918161631]; // 相当于 XSSearch::addRange(...)
$condition = ['WEIGHT', 'subject', 'hello', 0.5]; // 相当于额外调用 XSSearch::addWeight('subject', 'hello', 0.5);
$query->where($condition);

$model = Demo::findOne(321);
$model->docid(); //Xapian数据 ID
$model->rank(); //序号
$model->percent(); //匹配百分比
$model->ccount(); //折叠数量,须在 XSSearch::setCollapse() 指定后才有效
$model->matched(); //获得匹配词汇

$db = Demo::getDb();
$search = $db->getSearch();
$index = $db->getIndex();
// 如有必要,还可以获得 scws 分词对象
$scws = $db->getScws();

    // ...
    'bootstrap' => ['debug'],
    'modules' => [
        'debug' => [
            'class' => 'yii\\debug\\Module',
            'panels' => [
                'xunsearch' => [
                    'class' => 'hightman\\xunsearch\\DebugPanel',
                ],
            ],
        ],
    ],
    // ...