一、solr4.10 + mmseg4j-2.2.0分词器
1、solr的安装部署:http://www.cnblogs.com/honger/p/5876289.html,注意不同的版本安装方式可能不同。
solr与mmseg4j对应的版本,不要弄错,否则会出错。
- mmseg4j-solr-2.0.0.jar 要求 lucene/solr >= 4.3.0。在 lucene/solr [4.3.0, 4.7.1] 测试过兼容可用。
- mmseg4j-solr-2.1.0.jar 要求 lucene/solr 4.8.x
- mmseg4j-solr-2.2.0.jar 要求 lucene/solr [4.9, 4.10.x]
- mmseg4j-solr-2.3.0.jar 要求 lucene/solr [5.0, ]
地址:https://github.com/chenlb/mmseg4j-solr,往下拉找到下载,点击即可
2、下载好后,解压,将解压出来的两个jar包使用拷贝到tomcat的solr工程的lib下面,将mmseg4j-core-1.10.0.jar里的data文件夹里的以*.dic结尾的文件拷贝到solrhome的dic文件夹下,这个dic文件夹是自己创建的。
3、修改solrhome/collection2/conf/schma.xml,添加以下代码(collection2是你创建的core对象,以你自己创建的为准,代码中dicPath这个属性指的是你的dic文件目录,这里使用的是相对路径,相对于solrhome)
<fieldtype name="textComplex" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/> </analyzer> </fieldtype> <fieldtype name="textMaxWord" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" /> </analyzer> </fieldtype> <fieldtype name="textSimple" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="dic" /> </analyzer> </fieldtype>
4、启动tomcat
二、第二种方式solr-4.10.0 + IKAnalyzer分词器
IKAnalyzer分词器目前只能支持到solr5以下,以上的已经不支持了
1、IKAnalyzer分词器的下载:http://pan.baidu.com/s/1cBUw5g
2、IKAnalyzer解压后的目录结构,将其中的jar包拷贝到solr/WEB-INF/lib下,再将
IKAnalyzer.cfg.xml、ext_stopword.dic mydict.dic copy到 Tomcat的
webapps/solr/WEB-INF/classes下
3、修改你想要增加字段域的那个core下的schema.xml,我的是collection1添加以下代码
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType> <field name="item_title" type="text_ik" indexed="true" stored="true"/>
4、启动tomcat
solrjTest.java参考文档地址:http://mirrors.cnnic.cn/apache/lucene/solr/ref-guide/apache-solr-ref-guide-6.2.pdf,可用ctrl+s将它下载下来。
import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; public class SolrTest { @Test public void create() throws Exception { String urlString = "http://192.168.243.128:8080/solr"; SolrClient solr = new HttpSolrClient.Builder(urlString).build(); //集群 /*String zkHostString = "zkServerA:2181,zkServerB:2181,zkServerC:2181/solr"; SolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();*/ SolrInputDocument document = new SolrInputDocument(); document.addField("id", "552199"); document.addField("name", "Gouda cheese wheel"); document.addField("price", "49.99"); solr.add(document); // Remember to commit your changes! solr.commit(); } @Test public void delete() throws Exception { String urlString = "http://192.168.243.128:8080/solr"; SolrClient solr = new HttpSolrClient.Builder(urlString).build(); solr.deleteById("552199"); solr.deleteByQuery("id:100"); solr.commit(); } @Test public void query() throws Exception { String urlString = "http://192.168.243.128:8080/solr"; SolrClient solr = new HttpSolrClient.Builder(urlString).build(); SolrQuery query = new SolrQuery(); query.setQuery("*:*"); query.setStart(20); query.setRows(50); //增加高亮域 query.setHighlight(true); query.addHighlightField("item_title"); query.setHighlightSimplePre("<em style="color:red">"); query.setHighlightSimplePost("</em>"); query.addHighlightField("item_title"); QueryResponse queryResponse = solr.query(query); SolrDocumentList solrDocumentList = queryResponse.getResults(); for (SolrDocument solrDocument : solrDocumentList) { System.out.println("------------------------------------"); System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("item_title")); System.out.println(solrDocument.get("item_category_name")); System.out.println(solrDocument.get("item_sell_point")); System.out.println(solrDocument.get("item_price")); System.out.println("------------------------------------"); } } }