coreseek搜索使用指导文档。

时间:2021-01-02 08:29:28

代码下载:

http://download.csdn.net/detail/dl425134845/9535621

http://download.csdn.net/detail/dl425134845/9689950

http://download.csdn.net/detail/dl425134845/9689963


一、什么是搜索引擎?

搜索引擎(Search Engine)是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。

 

二、优秀的开源搜索引擎?

1、java平台 lucene \ Solr \ LIRE

2、php平台 sphinx \coreseek \ Solr

 

三、sphinxcoreseek的关系?

Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。Sphinx特别为一些脚本语言设计搜索API接口,如PHP,Python,Perl,Ruby等,同时为MySQL也设计了一个存储引擎插件

Sphinx单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 34分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

Sphinx的主要特性包括:

高速索引(在新款CPU上,近10 MB/秒);高速搜索 (2-4G的文本量中平均查询速度不到0.1);高可用性(单CPU上最大可支持100 GB的文本,100M文档);提供良好的相关性排名支持分布式搜索提供文档摘要生成;提供从MySQL内部的插件式存储引擎上搜索支持布尔,短语,和近义词查询;支持每个文档多个全文检索域(默认最大32个);支持每个文档多属性支持断词;支持单字节编码与UTF-8编码

Coreseek是一款中文全文检索/搜索软件,以GPLv2许可协议开源发布,基于Sphinx研发并独立发布,专攻中文搜索和信息处理领域,适用于行业/垂直搜索、论坛/站内搜索、数据库搜索、文档/文献检索、信息检索、数据挖掘等应用场景,用户可以免费下载使用。

 

四、倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)

五、倒排索引简单示例

以英文为例,下面是要被索引的文本:

 

   T0 = "it is what it is"

   T1 = "what is it"

   T2 = "it is a banana"

 

我们就能得到下面的反向文件索引:

 

 "a":      {2}

 "banana": {2}

 "is":     {0, 1, 2}

 "it":     {0, 1, 2}

 "what":   {0, 1}

 

检索的条件"what","is" "it" 将对应这个集合:{0,1}{0,1,2}{0,1,2}={0,1}

 

对相同的文字,我们得到后面这些完全反向索引,有文档数量和当前查询的单词结果组成的的成对数据。同样,文档数量和当前查询的单词结果都从零开始。

 

所以,"banana": {(2,3)}就是说 "banana"在第三个文档里 (T2),而且在第三个文档的位置是第四个单词(地址为 3)

 

"a":      {(2, 2)}

"banana": {(2, 3)}

"is":     {(0, 1), (0, 4), (1, 1), (2, 1)}

"it":     {(0, 0), (0, 3), (1, 2), (2, 0)}

"what":   {(0, 2), (1, 0)}

 

如果我们执行短语搜索"what is it"我们得到这个短语的全部单词各自的结果所在文档为文档0和文档1。但是这个短语检索的连续的条件仅仅在文档1得到。

 

六、coreseek安装

1、必要条件mmseg3

2、参考:http://blog.csdn.net/e421083458/article/details/21529969

                   http://blog.csdn.net/dl425134845/article/details/51005184

 

七、cnpatent索引配置文件编写

1、复制coreseek-4.1-beta/testpack/etc/csft_mysql.conf到你存放索引文件的位置;

2、个人单机测试可以和代码放在同一个目录下,创建index目录,发在这个文件夹下;

3、结合数据表的实际情况,按照cnpatent.conf配置文件配置;

4、创建索引/usr/local/coreseek/bin/indexer-c /www/cnpatent/index/cnpatent.conf --all--rotate

5、启动/usr/local/coreseek/bin/searchd-c /www/cnpatent/index/cnpatent.conf

6、命令行检索测试/usr/local/coreseek/bin/search-c /www/cnpatent/index/cnpatent.conf电风扇

/usr/local/coreseek/bin/search-c /www/cnpatent/index/cnpatent.conf分离缓冲器

/usr/local/coreseek/bin/search-c /www/cnpatent/index/cnpatent.conf芳基磺酰基

7、关闭服务/usr/local/coreseek/bin/searchd-c /www/cnpatent/index/cnpatent.conf --stop

 

八、专业词库的导入与使用

0网上示例:

         http://blog.zhanjz.cn/31.html 

         http://blog.csdn.net/liushuai_andy/article/details/9129655

         http://www.coreseek.cn/opensource/mmseg/

1、下载词库转换工具http://www.jz5u.com/Soft/softdown.asp?softid=26014

2、下载词库字典http://pinyin.sogou.com/dict/cate/index/127

3

4、注意存储成txt文本,同时采用utf-8格式存储。命名为agriculture.txt

5、将代码、上述新词库、原始词库(/coreseek-4.1-beta/mmseg-3.2.14/data/unigram.txt)拷贝到同一目录下;执行addwords.php文件,生成一个新的txt文档words_new.txt

6cp words_new.txt  /usr/local/mmseg3/bin/unigram.txt ,注意必须是这个名字

7./mmseg -u unigram.txt

8、生成unigram.txt.uni文件

9、将unigram.txt.uni文件修改为名为uni.lib文件

10、将文件拷贝到etc目录下,覆盖同名文件,同时修改可执行权限。

11、词典重新构造完成,创建新的索引

12、启动、测试

 

九、增量索引处理

0、网上示例http://blog.csdn.net/ms_x0828/article/details/7679229

1、注意修改配置文件

2、自己到数据表中增加测试数据

3、增量索引生成 /usr/local/coreseek/bin/indexer -c/www/cnpatent/index/cnpatentdelta.conf delta --rotate

4、合并索引 /usr/local/coreseek/bin/indexer-c /www/cnpatent/index/cnpatentdelta.conf --merge cnpatent delta --rotate--merge-dst-range deleted 0 0

5、注意合并索引时要保证索引在后台运行,不然会报错

6、测试

 

十、结合php代码编写搜索

1、个人使用的Yii2,可以快速生成form,方便演示

2、注意yii2有提供sphinx组件,但是我没有使用;

3、从源码包中可以找到sphinxphp接口;coreseek-4.1-beta/testpack/api

4、参见CnPatentController.php代码

 

十一、高亮显示

1 、参见代码

 

十二、匹配模式

1SPH_MATCH_ALL, 匹配所有查询词(默认模式);

2SPH_MATCH_ANY,匹配查询词中的任意一个;

3SPH_MATCH_PHRASE,将整个查询看作一个词组,要求按顺序完整匹配;

4SPH_MATCH_BOOLEAN,将查询看作一个布尔表达式 (参见 5.2“布尔查询语法”);

5SPH_MATCH_EXTENDED,将查询看作一个CoreSeek/Sphinx内部查询语言的表达式 (参见 5.3 “扩展查询语法”).从版本Coreseek 3/Sphinx 0.9.9开始,这个选项被选项SPH_MATCH_EXTENDED2代替,它提供了更多功能和更佳的性能。保留这个选项是为了与遗留的旧代码兼容——这样即使Sphinx及其组件包括API升级的时候,旧的应用程序代码还能够继续工作。

6SPH_MATCH_EXTENDED2,使用第二版的“扩展匹配模式”对查询进行匹配.

7SPH_MATCH_FULLSCAN,强制使用下文所述的“完整扫描”模式来对查询进行匹配。注意,在此模式下,所有的查询词都被忽略,尽管过滤器、过滤器范围以及分组仍然起作用,但任何文本匹配都不会发生

 

十三、布尔查询语法

http://www.coreseek.cn/docs/coreseek_4.1-sphinx_2.0.1-beta.html#extended-syntax

1、或(OR)运算符:

    hello | world

 

2、非(NOT)运算符:

    hello -world

    hello !world

 

3、字段(field)搜索符:

    @title hello @body world

 

4、字段限位修饰符(版本Coreseek 3/Sphinx 0.9.9-rc1中引入):

    @body[50] hello

 

5、多字段搜索符:

    @(title,body) hello world

 

6、全字段搜索符:

    @* hello

 

7、词组搜索符:

    "hello world"

 

8、近似距离搜索符:

    "hello world"~10

 

9、阀值匹配符:

    "the world is a wonderfulplace"/3

 

10、严格有序搜索符(即“在前”搜索符):

         aaa << bbb << ccc

 

11、严格形式修饰符(版本Coreseek 3/Sphinx 0.9.9-rc1中引入):

         raining =cats and =dogs

 

12、字段开始和字段结束修饰符 (版本Coreseek 3.1/Sphinx0.9.9-rc2中引入):

  ^hello world$

 

13NEAR,广义临近运算符 (版本2.0.1-beta中引入):

    hello NEAR/3 world NEAR/4 "mytest"

 

14SENTENCE句子运算符 (版本2.0.1-beta中引入):

    all SENTENCE words SENTENCE "in onesentence"

 

15PARAGRAPH段落运算符 (版本2.0.1-beta中引入):

         "Bill Gates" PARAGRAPH"Steve Jobs"

 

16ZONE区域限制运算符 (版本2.0.1-beta中引入):

    ZONE:(h3,h4) only in these titles

 

17SetFilterRange 

functionSetFilterRange ( $attribute, $min, $max, $exclude=false )

 

添加新的整数范围过滤器。

 

此调用在已有的过滤器列表中添加新的过滤器。$attribute是属性名, $min$max定义了一个整数闭区间,$exclude布尔值,它控制是接受匹配的文档(默认模式,即$excludefalse时)还是拒绝它们。

 

只有当索引中$attribute列的值落在$min $max之间(包括$min $max),文档才会被匹配(或者拒绝,如果$exclude值为true)。

coreseek搜索使用指导文档。coreseek搜索使用指导文档。coreseek搜索使用指导文档。


【控制器和表结构】

<?php

namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\db\Query;

class CnPatentController extends \yii\web\Controller
{
    
    public function actionForm()
    {
        $model = new \app\models\CnPatent();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate()) {
                #1、获取查询参数
                $data = Yii::$app->request->post();
                $data = $data['CnPatent'];
                $data = array_filter($data);
                
                
                #2、连接索引,查询索引
                require("sphinxapi.php");//引入类
                $cl = new \SphinxClient();
                $cl->SetServer('127.0.0.1', 9312);   
                $cl->SetConnectTimeout(100);  
                $cl->SetArrayResult(true);
                $filter = '';
                if(empty($data)){  
                    $cl->SetMatchMode(SPH_MATCH_FULLSCAN);//完整扫描
                }else{  
                    $cl->SetMatchMode(SPH_MATCH_EXTENDED2);//扩展匹配模式
                    $filter = self::SimpleFormatSql($data);
                }  
                $res = $cl->Query($filter , "cnpatent");  //指定索引名称
                //echo $filter;exit;
                #3、根据返回的id再sql查库
                if($res['total_found'] > 0){  
                    $ids = [];  
                    foreach ( $res['matches'] as $key => $row ) {  
                        $ids[] = $row['id'];  
                    }  
                    $query = new Query();  
                    $list = $query->select('ID,TITLE,SQH,FMSJR,SQDATE,url')->from('cn_patent')->where(['in', 'ID', $ids])->limit(10)->all();  
                } else {  
                    $list = [];  
                }  
                
                #4、高亮  注意返回值的key将被处理成数字
                $opts = array(
                    "before_match"          => "<font color='red'>",  
                    "after_match"           => "</font>"  
                );
                foreach($list as $k=>$v){
                    $list[$k] = $cl-> buildExcerpts($v,'cnpatent',$data['TITLE'],$opts);
                }
                #4、渲染页面
                return $this->render('list', [
                    'list' => $list,
                ]);
            }
        }

        return $this->render('form', [
            'model' => $model,
        ]);
    }

    #simple简单查询条件处理
    private static function SimpleFormatSql($paramArr){
        $str = '';
        if(isset($paramArr['ZQX']) && $paramArr['ZQX'])
            $str .= " @ZQX {$paramArr['ZQX']} ";
        
        if(isset($paramArr['TITLE']) && $paramArr['TITLE'])
            $str .= " @TITLE {$paramArr['TITLE']} ";

        if(isset($paramArr['SQZLQR']) && $paramArr['SQZLQR'])
            $str .= " @SQZLQR {$paramArr['SQZLQR']} ";
    
        if(isset($paramArr['FMSJR']) && $paramArr['FMSJR'])
            $str .= " @FMSJR {$paramArr['FMSJR']} ";
        
        if(isset($paramArr['FLH']) && $paramArr['FLH'])
            $str .= " @FLH {$paramArr['FLH']} ";

        if(isset($paramArr['YXQ']) && $paramArr['YXQ'])
            $str .= " @YXQ {$paramArr['YXQ']} ";
    
        if(isset($paramArr['ZLDLJG']) && $paramArr['ZLDLJG'])
            $str .= " @ZLDLJG {$paramArr['ZLDLJG']} ";
        
        if(isset($paramArr['DLR']) && $paramArr['DLR'])
            $str .= " @DLR {$paramArr['DLR']} ";

        if(isset($paramArr['GJGB']) && $paramArr['GJGB'])
            $str .= " @GJGB {$paramArr['GJGB']} ";
    
        if(isset($paramArr['ZY']) && $paramArr['ZY'])
            $str .= " @ZY {$paramArr['ZY']} ";
        
        if(isset($paramArr['ZYFT']) && $paramArr['ZYFT'])
            $str .= " @ZYFT {$paramArr['ZYFT']} ";

        if(isset($paramArr['SQH']) && $paramArr['SQH'])
            $str .= " @SQH {$paramArr['SQH']} ";

        if(isset($paramArr['SQGBH']) && $paramArr['SQGBH'])
            $str .= " @SQGBH {$paramArr['SQGBH']} ";
        
        if(isset($paramArr['ADDRESS']) && $paramArr['ADDRESS'])
            $str .= " @ADDRESS {$paramArr['ADDRESS']} ";

        if(isset($paramArr['ZFLH']) && $paramArr['ZFLH'])
            $str .= " @ZFLH {$paramArr['ZFLH']} ";
        
        if(isset($paramArr['SCY']) && $paramArr['SCY'])
            $str .= " @SCY {$paramArr['SCY']} ";
        
        if(isset($paramArr['GJSQ']) && $paramArr['GJSQ'])
            $str .= " @GJSQ {$paramArr['GJSQ']} ";

        if(isset($paramArr['FASQ']) && $paramArr['FASQ'])
            $str .= " @FASQ {$paramArr['FASQ']} ";

        if(isset($paramArr['SQGGH']) && $paramArr['SQGGH'])
            $str .= " @SQGGH {$paramArr['SQGGH']} ";
        
        if(isset($paramArr['SQDATE']) && $paramArr['SQDATE'])//注意,中横线要转义
            $str .= " @SQDATE ".str_replace('-','\-',$paramArr['SQDATE'])." ";

        if(isset($paramArr['SQGBDATE']) && $paramArr['SQGBDATE'])
            $str .= " @SQGBDATE ".str_replace('-','\-',$paramArr['SQGBDATE'])." ";
        
        if(isset($paramArr['FCFL']) && $paramArr['FCFL'])
            $str .= " @FCFL {$paramArr['FCFL']} ";
        
        if(isset($paramArr['SQGGDATE']) && $paramArr['SQGGDATE'])
            $str .= " @SQGGDATE ".str_replace('-','\-',$paramArr['SQGGDATE'])." ";

        if(isset($paramArr['PROVICECODE']) && $paramArr['PROVICECODE'])
            $str .= " @PROVICECODE {$paramArr['PROVICECODE']} ";
        
        if(isset($paramArr['JRGJRQ']) && $paramArr['JRGJRQ'])
            $str .= " @JRGJRQ {$paramArr['JRGJRQ']} ";

        if(isset($paramArr['BZR']) && $paramArr['BZR'])
            $str .= " @BZR {$paramArr['BZR']} ";
        
        if(!empty($str))
            $str = trim($str);
        
        return $str;
    }
    
////////////////////// 高级版本///////////////////////////////////////    
    public function actionForm2()
    {
        $model = new \app\models\CnPatent();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate()) {
                // #1、获取查询参数
                $data = Yii::$app->request->post();
                $data = $data['CnPatent'];
                $data = array_filter($data);
                
                #2、连接索引,查询索引
                require("sphinxapi.php");//引入类
                $cl = new \SphinxClient();
                $cl->SetServer('127.0.0.1', 9312);   
                $cl->SetConnectTimeout(100);  
                $cl->SetArrayResult(true);
                $filter = '';
                if(empty($data)){  
                    $cl->SetMatchMode(SPH_MATCH_FULLSCAN);//完整扫描
                }else{  
                    $cl->SetMatchMode(SPH_MATCH_EXTENDED2);//扩展匹配模式
                    $filter = self::ComplexFormatSql($data);
                }  
                
                if(isset($data['SQDATE_START']) && $data['SQDATE_START'] && !isset($data['SQDATE_END'])){
                    $filter .= " @SQDATE ".str_replace('-','\-',$data['SQDATE_START'])." ";
                }elseif(!isset($data['SQDATE_START']) && isset($data['SQDATE_END']) && $data['SQDATE_END']){
                    $filter .= " @SQDATE ".str_replace('-','\-',$data['SQDATE_END'])." ";
                }elseif(isset($data['SQDATE_START']) && $data['SQDATE_START'] && isset($data['SQDATE_END']) && $data['SQDATE_END']){
                    if($data['SQDATE_START'] > $data['SQDATE_END']){
                        $temp = $data['SQDATE_START'];
                        $data['SQDATE_START'] = $data['SQDATE_END'];
                        $data['SQDATE_END'] = $temp;unset($temp);
                    }
                    $cl->SetFilterRange('SQDATE2', strtotime($data['SQDATE_START']), strtotime($data['SQDATE_END']), false );
                }
                
                
                $res = $cl->Query($filter , "cnpatent");  //指定索引名称
                
                #3、根据返回的id再sql查库
                if($res['total_found'] > 0){  
                    $ids = [];  
                    foreach ( $res['matches'] as $key => $row ) {  
                        $ids[] = $row['id'];  
                    }  
                    $query = new Query();  
                    $list = $query->select('ID,TITLE,SQH,FMSJR,SQDATE,url,SQZLQR')->from('cn_patent')->where(['in', 'ID', $ids])->limit(10)->all();  
                } else {  
                    $list = [];  
                }  
                
                #4、高亮  注意返回值的key将被处理成数字
                $opts = array(
                    "before_match"          => "<font color='red'>",  
                    "after_match"           => "</font>"  
                );
                foreach($list as $k=>$v){
                    $temp = $v;
                    if(isset($data['TITLE']))
                        $temp = $cl-> buildExcerpts($v,'cnpatent',$data['TITLE'],$opts);
                    if(isset($data['SQZLQR']))
                        $temp = $cl-> buildExcerpts($temp,'cnpatent',$data['SQZLQR'],$opts);
                    $list[$k] = $temp;
                }
                foreach($list as $k=>$v){
                    $list[$k] = array_values($v);
                }
                //var_dump($list);exit;
                #4、渲染页面
                return $this->render('list2', [
                    'list' => $list,
                ]);
            }
        }

        return $this->render('form2', [
            'model' => $model,
        ]);
    }
    
    #complex复杂查询条件处理
    private static function ComplexFormatSql($paramArr){
        $str = '';
        if(isset($paramArr['TITLE']) && $paramArr['TITLE']){
            if(isset($paramArr['TITLE_FLAG'])){
                if($paramArr['TITLE_FLAG'] == 1){
                    $str .= " @TITLE {$paramArr['TITLE']} ";
                }elseif($paramArr['TITLE_FLAG'] == 2){
                    $str .= " @TITLE {$paramArr['TITLE']} | ";
                }elseif($paramArr['TITLE_FLAG'] == 3){
                    $str .= " @TITLE !{$paramArr['TITLE']} ";
                }
            }
        }
        
        if(isset($paramArr['SQZLQR']) && $paramArr['SQZLQR']){
            if(isset($paramArr['SQZLQR_FLAG'])){
                if($paramArr['SQZLQR_FLAG'] == 1){
                    $str .= " @SQZLQR {$paramArr['SQZLQR']} ";
                }elseif($paramArr['SQZLQR_FLAG'] == 2){
                    $str .= " @SQZLQR {$paramArr['SQZLQR']} | ";
                }elseif($paramArr['SQZLQR_FLAG'] == 3){
                    $str .= " @SQZLQR !{$paramArr['SQZLQR']} ";
                }
            }
        }
        
        if(isset($paramArr['FMSJR']) && $paramArr['FMSJR']){
            if(isset($paramArr['FMSJR_FLAG'])){
                if($paramArr['FMSJR_FLAG'] == 1){
                    $str .= " @FMSJR {$paramArr['FMSJR']} ";
                }elseif($paramArr['FMSJR_FLAG'] == 2){
                    $str .= " @FMSJR {$paramArr['FMSJR']} | ";
                }elseif($paramArr['FMSJR_FLAG'] == 3){
                    $str .= " @FMSJR !{$paramArr['FMSJR']} ";
                }
            }
        }
        
        if(isset($paramArr['ZY']) && $paramArr['ZY']){
            if(isset($paramArr['ZY_FLAG'])){
                if($paramArr['ZY_FLAG'] == 1){
                    $str .= " @ZY {$paramArr['ZY']} ";
                }elseif($paramArr['ZY_FLAG'] == 2){
                    $str .= " @ZY {$paramArr['ZY']} | ";
                }elseif($paramArr['ZY_FLAG'] == 3){
                    $str .= " @ZY !{$paramArr['ZY']} ";
                }
            }
        }
        
        if(isset($paramArr['SQH']) && $paramArr['SQH']){
            if(isset($paramArr['SQH_FLAG'])){
                if($paramArr['SQH_FLAG'] == 1){
                    $str .= " @SQH {$paramArr['SQH']} ";
                }elseif($paramArr['SQH_FLAG'] == 2){
                    $str .= " @SQH {$paramArr['SQH']} | ";
                }elseif($paramArr['SQH_FLAG'] == 3){
                    $str .= " @SQH !{$paramArr['SQH']} ";
                }
            }
        }
        
        if(isset($paramArr['SQGGH']) && $paramArr['SQGGH']){
            if(isset($paramArr['SQGGH_FLAG'])){
                if($paramArr['SQGGH_FLAG'] == 1){
                    $str .= " @SQGGH {$paramArr['SQGGH']} ";
                }elseif($paramArr['SQGGH_FLAG'] == 2){
                    $str .= " @SQGGH {$paramArr['SQGGH']} | ";
                }elseif($paramArr['SQGGH_FLAG'] == 3){
                    $str .= " @SQGGH !{$paramArr['SQGGH']} ";
                }
            }
        }
        
        return $str;        
    }

}


// CREATE TABLE `cn_patent` (
  // `ID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  // `TITLE` varchar(255) DEFAULT NULL COMMENT '标题',
  // `SQH` varchar(200) DEFAULT NULL COMMENT '申请专利号',
  // `SQDATE` varchar(10) DEFAULT NULL COMMENT '申请日',
  // `SQGBH` varchar(200) DEFAULT NULL COMMENT '申请公布号',
  // `SQGBDATE` varchar(10) DEFAULT NULL COMMENT '申请公布日',
  // `SQZLQR` varchar(255) DEFAULT NULL COMMENT '申请专利权人',
  // `FMSJR` varchar(255) DEFAULT NULL COMMENT '发明设计人',
  // `ADDRESS` varchar(200) DEFAULT NULL COMMENT '地址',
  // `PROVICECODE` varchar(50) DEFAULT NULL COMMENT '国省代码',
  // `ZFLH` varchar(200) DEFAULT NULL COMMENT '主分类号',
  // `FLH` varchar(255) DEFAULT NULL COMMENT '分类号',
  // `YXQ` varchar(255) DEFAULT NULL COMMENT '优先权',
  // `ZLDLJG` varchar(255) DEFAULT NULL COMMENT '专利代理机构',
  // `DLR` varchar(255) DEFAULT NULL COMMENT '代理人',
  // `SCY` varchar(200) DEFAULT NULL COMMENT '审查员',
  // `GJSQ` varchar(200) DEFAULT NULL COMMENT '国际申请',
  // `GJGB` varchar(255) DEFAULT NULL COMMENT '国际公布',
  // `JRGJRQ` varchar(100) DEFAULT NULL COMMENT '进入国家日期',
  // `FCFL` varchar(10) DEFAULT NULL COMMENT '范畴分类',
  // `BZR` varchar(100) DEFAULT NULL COMMENT '颁证日',
  // `FASQ` varchar(200) DEFAULT NULL COMMENT '分案申请',
  // `ZY` varchar(255) DEFAULT NULL COMMENT '摘要',
  // `ZYFT` varchar(255) DEFAULT NULL COMMENT '摘要附图',
  // `ZQX` longtext COMMENT '主权项',
  // `SQGGH` varchar(200) DEFAULT NULL COMMENT '授权公告号',
  // `SQGGDATE` varchar(10) DEFAULT NULL COMMENT '授权公告日',
  // `URL` longtext COMMENT 'PageUrl',
  // PRIMARY KEY (`ID`)
// ) ENGINE=InnoDB AUTO_INCREMENT=824455 DEFAULT CHARSET=utf8 COMMENT='中国专利著入项';

// CREATE TABLE `sph_counter` (
  // `counter_id` int(1) unsigned NOT NULL AUTO_INCREMENT,
  // `max_doc_id` int(11) unsigned NOT NULL,
  // PRIMARY KEY (`counter_id`)
// ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

    
  
【模板 form.php】

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model app\models\CnPatent */
/* @var $form ActiveForm */
?>
<div class="cn-patent-form">

    <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'ZQX') ?>
        <?= $form->field($model, 'URL') ?>
        <?= $form->field($model, 'TITLE') ?>
        <?= $form->field($model, 'SQZLQR') ?>
        <?= $form->field($model, 'FMSJR') ?>
        <?= $form->field($model, 'FLH') ?>
        <?= $form->field($model, 'YXQ') ?>
        <?= $form->field($model, 'ZLDLJG') ?>
        <?= $form->field($model, 'DLR') ?>
        <?= $form->field($model, 'GJGB') ?>
        <?= $form->field($model, 'ZY') ?>
        <?= $form->field($model, 'ZYFT') ?>
        <?= $form->field($model, 'SQH') ?>
        <?= $form->field($model, 'SQGBH') ?>
        <?= $form->field($model, 'ADDRESS') ?>
        <?= $form->field($model, 'ZFLH') ?>
        <?= $form->field($model, 'SCY') ?>
        <?= $form->field($model, 'GJSQ') ?>
        <?= $form->field($model, 'FASQ') ?>
        <?= $form->field($model, 'SQGGH') ?>
        <?= $form->field($model, 'SQDATE') ?>
        <?= $form->field($model, 'SQGBDATE') ?>
        <?= $form->field($model, 'FCFL') ?>
        <?= $form->field($model, 'SQGGDATE') ?>
        <?= $form->field($model, 'PROVICECODE') ?>
        <?= $form->field($model, 'JRGJRQ') ?>
        <?= $form->field($model, 'BZR') ?>
    
        <div class="form-group">
            <?= Html::submitButton('查询', ['class' => 'btn btn-primary']) ?>
        </div>
    <?php ActiveForm::end(); ?>

</div><!-- cn-patent-form -->

【模板 form2.php】

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;

/* @var $this yii\web\View */
/* @var $model app\models\CnPatent */
/* @var $form ActiveForm */
?>
<style>
.form-group{clear:both;padding:5px 0px;}
.control-label{float:left;width:10%}
.form-control{float:left;width:60%}
.form-control2{width:40%}
.label2{float:left;margin:0px 5px;}
</style>

<div class="cn-patent-form">
    <form id="w0" action="/index.php?r=cn-patent/form2" method="post">
        <input type="hidden" name="_csrf" value="a2dJZnFCLjgHDHk.PTBnayozHjIVMGZtWxA8Vx52SQ0vPg4RSHB5Tw==">        

        <div class="form-group field-cnpatent-title">
            <label class="control-label" for="cnpatent-title">标题</label>
            <input type="text" id="cnpatent-title" class="form-control" name="CnPatent[TITLE]">
            <select class="form-control" name="CnPatent[TITLE_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>  
        
        <div class="form-group field-cnpatent-sqzlqr">
            <label class="control-label" for="cnpatent-sqzlqr">申请专利权人</label>
            <input type="text" id="cnpatent-sqzlqr" class="form-control" name="CnPatent[SQZLQR]">
            <select class="form-control" name="CnPatent[SQZLQR_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>  
        
        <div class="form-group field-cnpatent-fmsjr">
            <label class="control-label" for="cnpatent-fmsjr">发明设计人</label>
            <input type="text" id="cnpatent-fmsjr" class="form-control" name="CnPatent[FMSJR]">
            <select class="form-control" name="CnPatent[FMSJR_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>  
        
        <div class="form-group field-cnpatent-zy">
            <label class="control-label" for="cnpatent-zy">摘要</label>
            <input type="text" id="cnpatent-zy" class="form-control" name="CnPatent[ZY]">
            <select class="form-control" name="CnPatent[ZY_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>  
        
        <div class="form-group field-cnpatent-sqh">
            <label class="control-label" for="cnpatent-sqh">申请专利号</label>
            <input type="text" id="cnpatent-sqh" class="form-control" name="CnPatent[SQH]">
            <select class="form-control" name="CnPatent[SQH_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>        

        <div class="form-group field-cnpatent-sqggh">
            <label class="control-label" for="cnpatent-sqggh">授权公告号</label>
            <input type="text" id="cnpatent-sqggh" class="form-control" name="CnPatent[SQGGH]">
            <select class="form-control" name="CnPatent[SQGGH_FLAG]" style="width:206px">
                <option value="1">AND</option>
                <option value="2">OR</option>
                <option value="3">NOT IN</option>
            </select>
        </div>        
        
        <div class="form-group field-cnpatent-sqdate">
            <label class="control-label" for="cnpatent-sqdate">申请日</label>
            <input type="text" id="cnpatent-sqdate" class="form-control form-control2" name="CnPatent[SQDATE_START]">
            <label class="label2"> -- </label>
            <input type="text" id="cnpatent-sqdate" class="form-control form-control2" name="CnPatent[SQDATE_END]">
        </div>        
        
        <div class="form-group field-cnpatent-sqggdate">
            <label class="control-label" for="cnpatent-sqggdate">授权公告日</label>
            <input type="text" id="cnpatent-sqggdate" class="form-control form-control2" name="CnPatent[SQGGDATE_START]">
            <label class="label2"> -- </label>    
            <input type="text" id="cnpatent-sqdate" class="form-control form-control2" name="CnPatent[SQGGDATE_END]">
        </div>
    
        <div class="form-group">
            <button type="submit" class="btn btn-primary">查询</button>        
        </div>
    </form>

</div>

【模板list.php】

<?php
use yii\helpers\Html;
header("Content-type: text/html; charset=utf-8");
?>
<style type="text/css">
table.gridtable {
    font-family: verdana,arial,sans-serif;
    font-size:11px;
    color:#333333;
    border-width: 1px;
    border-color: #666666;
    border-collapse: collapse;
}
table.gridtable th {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #dedede;
}
table.gridtable td {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #ffffff;
}
</style>
<?php
$str = '';
$str .= '<table class="gridtable">';
$str .= '<tr><th>ID</th><th>标题</th><th>申请号</th><th>发明设计人</th><th>申请日</th></tr>';
foreach($list as $k=>$v){
    $str .= '<tr><td>'.$v[0].'</td><td><a href="'.$v[5].'">'.$v[1].'</a></td><td>'.$v[2].'</td><td>'.$v[3].'</td><td>'.$v[4].'</td></tr>';
}
$str .= '</table>';
echo $str;
?>
<a href="/index.php?r=cn-patent/form" class="btn btn-primary">返回</a>


【模板list2.php】

<?php
use yii\helpers\Html;
header("Content-type: text/html; charset=utf-8");
?>
<style type="text/css">
table.gridtable {
    font-family: verdana,arial,sans-serif;
    font-size:11px;
    color:#333333;
    border-width: 1px;
    border-color: #666666;
    border-collapse: collapse;
}
table.gridtable th {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #dedede;
}
table.gridtable td {
    border-width: 1px;
    padding: 8px;
    border-style: solid;
    border-color: #666666;
    background-color: #ffffff;
}
</style>
<?php
$str = '';
$str .= '<table class="gridtable">';
$str .= '<tr><th>ID</th><th>标题</th><th>申请号</th><th>发明设计人</th><th>申请日</th><th>申请专利权人</th></tr>';
foreach($list as $k=>$v){
    $str .= '<tr><td>'.$v[0].'</td><td><a href="'.$v[5].'">'.$v[1].'</a></td><td>'.$v[2].'</td><td>'.$v[3].'</td><td>'.$v[4].'</td><td>'.$v[6].'</td></tr>';
}
$str .= '</table>';
echo $str;
?>
<a href="/index.php?r=cn-patent/form2" class="btn btn-primary">返回</a>