solr运行步骤

一,安装

 

1,下载solr 3.3.0,解压缩

2,将\apache-solr-3.3.0\example\webapps\solr.war放到\tomcat\Tomcat6-2\webapps下解包.生成名字为solr的工程.

 

3,在\tomcat\conf\Catalina\localhost文件夹下,创建solr.xml(对应webapps下的solr工程),xml文件内容为

<Context  debug="0" crossContext="true" >    
  <Environment name="solr/home" type="java.lang.String" value="C:/web/solr" override="true" />  
</Context>  
 

指定了solr.home为C:/web/solr...tomcat启动后会在这个路径solr.home/conf下加载相关配置文件

 

4,\apache-solr-3.3.0\example\solr下的文件复制到solr.home中(即C:/web/sol下)

 

5,访问http://localhost:8080/solr/admin/如果出现页面,表明部署成功.点击search按钮可以看到服务器的回应


<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
  <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">*:*</str>
    <str name="rows">10</str>
    <str name="version">2.2</str>
  </lst>
</lst>
<result name="response" numFound="0" start="0"/>
</response>
 

 

由于没有建索引,而且页面不支持中文参数,所以暂时无法进行有意义的测试

 

 

二,中文分词

 

lucene在升级到3.0之后改变了api,而目前流行的中文分词器中,有些并没有同步更新,于是选择了IKAnalyzer3.2.5.安装步骤:

 

1,下载IKAnalyzer3.2.5Stable_bin.zip,解压缩.将IKAnalyzer3.2.5Stable.jar导入工程.然后在solr.home/conf(即C:/web/solr/conf)下找到schema.xml,加入如下代码----这段代码定义了text类型,以及处理方式,这个类型会在--第三部分,建立索引--中用到

 

	 <fieldType name="text" class="solr.TextField" positionIncrementGap="100">  
            <analyzer type="index">  
                <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" /> 
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" />  
                <filter class="solr.LowerCaseFilterFactory" />  
                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />  
                <filter class="solr.RemoveDuplicatesTokenFilterFactory" />  
            </analyzer>  
            <analyzer type="query">  
            	
                <tokenizer class="org.wltea.analyzer.solr.IKTokenizerFactory" /> 
                
                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />  
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />  
                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1" />  
                <filter class="solr.LowerCaseFilterFactory" />  
                <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" />  
                <filter class="solr.RemoveDuplicatesTokenFilterFactory" />  
            </analyzer>  
    </fieldType> 

 

2,访问http://localhost:8080/solr/admin/analysis.jsp,测试分词效果

 

 

三,建立索引

 

1,打开solr.home/conf/solrconfig.xml,加入如下代码----如果uri包含/dataimport,则用DataImportHandler处理

 

<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">

                     <lst name="defaults">

                          <str name="config">../db/conf/db-data-config.xml</str>     

                     </lst>

  </requestHandler>

   <str name="config">../db/conf/db-data-config.xml</str> ---指定数据库配置文件的位置

   之后将apache-solr-3.3\apache-solr-3.3.0\dist下的apache-solr-dataimporthandler-3.3.0.jar引入工程

 

2,新建db-data-config.xml(路径和名称要符合上面的配置),加入如下代码

 

<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>  
        <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.110.112:3396/laws_and_regulations" user="root" password="123456"/>  
    		<document name="documents">  
            <entity name="documents" pk="id" query="select id,title,content,publishtime,validtime,category1,category2,invalidtime,publishorg from laws_and_regulations WHERE '${dataimporter.request.command}' != 'delta-import' OR last_modified > '${dataimporter.last_index_time}' limit ${dataimporter.request.offset},${dataimporter.request.length}">  
         <!--   <field column="id" name="id" /> 
            <field column="title" name="title" />  
            <field column="content" name="content" />           
            <field column="publishtime" name="publishtime" /> 
            <field column="validtime" name="validtime" /> 

            <field column="category1" name="categor1" /> 
            <field column="category_2" name="categor2" /> 
            <field column="invalidtime" name="invalidtime" /> 
            <field column="publishorg" name="publishorg" /> 
      -->
        </entity>  
    </document>  
</dataConfig> 

 1)dataSource指定数据源

 2)document name作用不明

 3)查询语句中where后面的语句用于判断是否进行增量索引(待续),limit限制索引条目数,防止outofmemory错误.

 4)注释掉的部分,column属性匹配数据库字段名称,name属性在schema中定义(见第三步),如果column和name相同,可以省略这个配置

 

3,打开solr.home/conf/schema.xml,把如下代码添加到<fields>标签内

 

 <field name="title" type="text" indexed="true" stored="true" multiValued="true"/>
   <field name="category1" type="text" indexed="true" stored="true"/>
   <field name="category2" type="text" indexed="true" stored="true"/>
   <field name="content" type="text" indexed="true" stored="true" multiValued="true"/>
   <field name="publishtime" type="long" indexed="true" stored="true"/>
   <field name="validtime" type="long" indexed="true" stored="true"/>
   <field name="invalidtime" type="long" indexed="true" stored="true"/>
   <field name="publishorg" type="text" indexed="true" stored="true"/>

 name匹配步骤2中的name,type在schema.xml文件靠前的位置定义.由于我们在第二部分:中文分词中已经定义了text,并加入了中文分词器,所以将title,content这种需要中文检索的字段的type指定为text

 

 

4,访问http://localhost:8080/solr/dataimport?command=full-import&clean=true&offset=0&length=10000&indent=on

   1)dataimport触发DataImportHandler

2)command=full-import表示全部索引

   3)clean=true删除原来的所以,默认为true

   4)offset和length对应db-data-config.xml中的查询语句,默认JVM设置下length=20000就会导致outofmemory

   如果出现回应

 

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
</lst>
<lst name="initArgs">
  <lst name="defaults">
    <str name="config">../db/conf/db-data-config.xml</str>
  </lst>
</lst>
<str name="command">full-import</str>
<str name="status">busy</str>
<str name="importResponse">A command is still running...</str>
<lst name="statusMessages"/>
<str name="WARNING">This response format is experimental.  It is likely to change in the future.</str>
</response>

 

   表示执行成功,线程正在建立索引,status为busy.,此时再次刷新页面可以看到当前消耗的时间,处理的文档数等

 

   同时后台输出日志

 

 

   出现time taken = xx:xx:xx  意味着索引结束

 

   刷新页面后可以看到status变成了idle.

 

   在常见索引的过程中solr.home下会出现一个data文件夹,来存储索引.索引格式可参考http://forfuture1978.iteye.com/blog/546824

 

 

5,访问http://localhost:8080/solr/admin/输入查询语句,例如title:2007(表示在title字段中匹配含有2007的条目),点击search后可以看到返回结果,测试中部分结果如下

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">0</int>
  <lst name="params">
    <str name="indent">on</str>
    <str name="start">0</str>
    <str name="q">title:2007</str>
    <str name="rows">10</str>
    <str name="version">2.2</str>
  </lst>
</lst>
<result name="response" numFound="27" start="0">
  <doc>
    <str name="category1">中国法规规章库</str>
    <str name="category2">医药卫生</str>
    <arr name="content"><str>药品注册管理办法(2007年)

(国家食品药品监督管理局令第28号)




  《药品注册管理办法》于2007年6月18日经国家食品药品监督管理局局务会审议通过,现予公布,自2007年10月1日起施行。

                                                局长:邵明立
                                             二○○七年七月十日
 

---------------------------------------------------------未完待续---------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值