因近期想搞个知识库,所以选择solr,现在最新的solr是4.0,所以用solr4.0。
服务器:tomcat6
JDK :1.6
SOLR :4.0
中文分词器 :ik-analyzer,mmseg4j
安装:目前mmseg4j的版本是mmseg4j-1.9.0.v20120712-SNAPSHOT,经过测试,发现这个版本有bug:
java.lang.RuntimeException: java.lang.NoSuchMethodError: org.apache.l ucene.analysis.Tokenizer.reset(Ljava/io/Reader;)V
由于solr4.0对其中的有些类与方法做了调整,所以还是等待mmseg4j新版本修复吧。果断使用了ik-analyzer。
一、将apache-solr-4.0.0\example\webapps\solr.war放在tomcat的webapps下启动服务器解压该war包,另外还需要增加几个jar包:
apache-solr-dataimporthandler-4.0.0.jar
apache-solr-dataimporthandler-extras-4.0.0.jar
这两个jar包可以在solr的dist中可以找到
另外还需要相应数据库的驱动包,比如
mysql-connector-java-5.1.13-bin.jar
二、将apache-solr-4.0.0\example下的solr拷贝至apache-tomcat-6.0.29-solr\bin下
三、在apache-tomcat-6.0.29-solr\bin\solr\collection1\conf下的solrconfig.xml增加以下数据库配置
- <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
- <lst name="defaults">
- <str name="config">data-config.xml</str>
- </lst>
- </requestHandler>
四、将apache-tomcat-6.0.29-solr\bin\solr\collection1\conf下增加data-config.xml文件,内容如下:
- <dataConfig>
- <dataSource type="JdbcDataSource"
- driver="com.mysql.jdbc.Driver"
- url="jdbc:mysql://localhost:3306/solrdb"
- user="root"
- password="888888"/>
- <document name="content">
- <entity name="node" query="select id,author,title,content from solrdb">
- <field column="id" name="id" />
- <field column="author" name="author" />
- <field column="title" name="title" />
- <field column="content" name="content" />
- </entity>
- </document>
- </dataConfig>
五、增加中文分词器,ik-analyzer的配置如下:
它的安装部署十分简单,将IKAnalyzer2012.jar部署亍项目的lib目录中;IKAnalyzer.cfg.xml不stopword.dic文件放置在class根目录(对于web项目,通常是WEB-I NF/classes目彔,同hibernate、log4j等配置文件相同)下即可
solr4.0中schema.xml配置解析器:
- <schema name="example" version="1.1">
- ……
- <fieldType name="text" class="solr.TextField">
- <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
- </fieldType>
- ……
- </schema>
六、schema.xml完整配置:
- <?xml version="1.0" encoding="UTF-8" ?>
- <schema name="example" version="1.5">
- <types>
-
- <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
-
-
- <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
- <!-- IKAnalyzer 配置 -->
- <fieldType name="text" class="solr.TextField">
- <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
- </fieldType>
-
- </types>
-
-
- <fields>
- <field name="id" type="string" indexed="true" stored="true" required="true" />
- <field name="author" type="text" indexed="true" stored="true" multiValued="false"/>
- <field name="title" type="text" indexed="true" stored="true" multiValued="false"/>
- <field name="content" type="text" indexed="true" stored="true" multiValued="false" />
- <field name="_version_" type="long" indexed="true" stored="true"/>
- </fields>
-
- <uniqueKey>id</uniqueKey>
- <defaultSearchField>content</defaultSearchField>
- <solrQueryParser defaultOperator="OR"/>
- <copyField source="title" dest="content"/>
- <copyField source="author" dest="content"/>
-
-
- </schema>
解析:multiValued的个人理解是配置true则返回单条数据,false则可以返回多条,以后深入理解了再详解。defaultSearchField配置默认搜索索引,copyField可以讲 title、author字段添加至content默认搜索中
七、登录管理页面:
中文分词器分词的示例:
query示例: