一:第一次接触这方面的东西,感谢如下的博客主指引我方向
http://blog.csdn.net/linzhiqiang0316/article/details/51460574
http://blog.csdn.net/frankcheng5143/article/details/52292897
http://www.cnblogs.com/langfanyun/p/5829874.html
二:环境与软件
1,win10 64bit
2,jdk 8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3,tomcat 8 http://tomcat.apache.org/download-80.cgi
4,solr 6.2.1 http://www.apache.org/dyn/closer.lua/lucene/solr/6.2.1
三:安装
1,jdk,tomcat的安装配置
http://blog.csdn.net/msn465780/article/details/46118757
2,solr的配置
a,因为solr内置了jetty服务器所以我们可以直接启动
在solr的解压目录中添加一个start.bat文件并添加如下内容
bin/solr.cmd start -f
pause
双击启动,然后再浏览器中输入localhost:8983/solr
启动成功
b,第二种模式从tomcat启动
1,将solr-6.2.1\server\solr-webapp中的webapp拷贝到tomcat的webapps目录下并将webapp重命名为solr(可以重命名为取任意名称)。
2,将solr-6.2.1\server\lib\ext中的jar包拷贝到tomcat\webapps\solr\WEB-INF\lib目录下
3,将solr-6.0.0\server\resources下的log4j.properties配置文件拷贝到tomcat\webapps\solr\WEB-INF\classes,如果WEB-INF下没有classes文件那么 就创建一个classes文件夹。
4,在tomcat\webapps\solr下新建一个文件solrhome(文件夹名称可以任意命名),将solr-6.2.1\server\solr下的所有文件拷贝到刚刚创建的文件夹下
5,修改tomcat\webapps\solr\WEB-INF下的web.xml,找到如下代码:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/put/your/solr/home/here</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
默认是注解掉,放开注解,并将<env-entry-value>中的值修改为刚刚步骤7中的solrhome目录,如:E:\project\Search\apache-tomcat-8.0.33\webapps\solr\solrhome
6,运行tomcat,运行成功后访问:http://localhost:8080/solr/index.html
配置成功
四,core配置
1,将solr-6.2.1\example\example-DIH\solr木目录下的solr文件夹拷贝到tomcat\webapps\solr\solrhome文件夹下并删除solr文件夹下的core.properties(该文件在创建core时会自动生成,保留会容易导致core创建不成功)
2,打开浏览器输入http://localhost:8982/solr/index.html
3,colr配置文件的改写请查看
http://www.cnblogs.com/langfanyun/p/5829874.html
写的很详细.注意是managed-schema 而不是schema.xml
五:solr mysql 导入数据
1,将Java mysql 的驱动jar拷贝到tomcat\webapps\solr\WEB-INF\lib目录下
2,编辑tomcat\webapps\solr\solrhome\test\conf下的solr-data-config.xml文件内容如下
<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://192.168.0.199:3306/solr?characterEncoding=utf-8&autoReconnect=true" user="root" password="root"/> <document> <entity name="test" query="SELECT id,name,des,title FROM test"> <field column="id" name="id" /> <field column="name" name="name" /> <field column="des" name="des" /> <field column="title" name="title" /> </entity> </document>
注意,mysql下有这个库,这个表,并有对应的字段
3,编辑tomcat\webapps\solr\solrhome\test\conf下的solrconfig.xml文件添加如下内容
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">solr-data-config.xml</str> </lst> </requestHandler>
4,编辑tomcat\webapps\solr\solrhome\test\conf下的managed-schema文件
<!--字段定义--> <field name="_version_" type="long" indexed="true" stored="true"/> <field name="_root_" type="string" indexed="true" stored="false"/> <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false"/> <field name="name" type="string" indexed="true" stored="true"/> <field name="title" type="string" indexed="true" stored="true"/> <field name="des" type="text_ik" indexed="true" stored="true"/> <field name="text_ik" type="text_ik" indexed="false" stored="false" multiValued="true"/> <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/> <uniqueKey>id</uniqueKey> <!--拷贝字段便于检索--> <copyField source="name" dest="text_ik"/> <copyField source="title" dest="text_ik"/> <!--数据类型定义--> <fieldType name="string" class="solr.StrField" sortMissingLast="true"/> <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/> <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" positionIncrementGap="0"/> <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" positionIncrementGap="0"/> <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" positionIncrementGap="0"/> <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" positionIncrementGap="0"/> <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/> <fieldType name="tdate" class="solr.TrieDateField" precisionStep="6" positionIncrementGap="0"/> <fieldType name="binary" class="solr.BinaryField"/> <fieldType name="random" class="solr.RandomSortField" indexed="true"/> <!-- 空格分词器 --> <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> <analyzer> <tokenizer class="solr.WhitespaceTokenizerFactory"/> </analyzer> </fieldType> <!-- 普通的文本 fieldType StandardTokenizer, 移除"stopwords.txt"中指定的词(忽略大小写) -->
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> <filter class="solr.LowerCaseFilterFactory"/> </analyzer> </fieldType>
默认文件中有很多的fieldType可以放在哪儿不用删除
5,导入数据
六:中文分词
http://blog.csdn.net/linzhiqiang0316/article/details/51554217
七:solrj
1,添加maven依赖
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.2.1</version> </dependency>
2,测试代码
public class SolrServer { String baseURL = "http://localhost:8982/solr/test"; HttpSolrClient solrServer = new HttpSolrClient(baseURL); private HttpSolrClient getHttpSolrClient(){ return new HttpSolrClient(baseURL); } public void get(String name) throws IOException, SolrServerException { HttpSolrClient solrServer = getHttpSolrClient(); solrServer.setSoTimeout(5000); SolrQuery query = new SolrQuery(); //query.setQuery("*:*"); //查询所有 query.setQuery(name+"*"); query.setRows(1000); query.setStart(0); QueryResponse response = solrServer.query(query, SolrRequest.METHOD.POST); SolrDocumentList list = response.getResults(); System.err.println(list.getNumFound()); //总页数 System.err.println(JSON.toJSONString(list)); } public void getOne() throws IOException, SolrServerException { solrServer.setSoTimeout(5000); SolrQuery prams = new SolrQuery(); prams.set("q","*:*"); QueryResponse query = solrServer.query(prams, SolrRequest.METHOD.POST); SolrDocumentList list = query.getResults(); System.err.println(JSON.toJSONString(list)); for (SolrDocument document : list){ Collection<String> fieldNames = document.getFieldNames(); for (String field : fieldNames){ System.err.println(document.get(field)); } } } public void add(String id,String name) throws IOException, SolrServerException { SolrInputDocument doc = new SolrInputDocument(); doc.setField("id",id); doc.setField("title",name); doc.setField("description","这是我的测试!!!"); solrServer.add(doc); solrServer.commit(); } public void update(String id,String name) throws IOException, SolrServerException { SolrInputDocument doc = new SolrInputDocument(); doc.setField("id",id); doc.setField("name",name); doc.setField("description","这是我的测试!!!"); solrServer.add(doc); solrServer.commit(); } public void delete(String id) throws IOException, SolrServerException { solrServer.deleteById(id); solrServer.commit(); } public void deleteAll() throws IOException, SolrServerException { solrServer.deleteByQuery("*:*"); solrServer.commit(); } }