solr使用 备忘录 草稿
一、基础配置官网下载: http://lucene.apache.org/solr/
我下载下载版本是apache-solr-3.6.2
第一步:复制apache-solr-3.6.2\example\solr 文件夹到Tomcat7的根目录
第二步:复制apache-solr-3.6.2\example\webapps\solr.war 到Tomcat7的webapps目录下
第三步:在apache-tomcat-7.0.39\conf\Catalina\localhost目录下新建solr.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:/install/sorl20120423/apache-tomcat-7.0.39/webapps/solr" debug="0" crossContext="true" >
<Environment name="solr/home" type="java.lang.String" value="D:/install/sorl20120423/apache-tomcat-7.0.39/solr" override="true" />
<!--<Environment name="solr/home" type="java.lang.String" value="D:/tmp/lringsolr" override="true" /> -->
</Context>
第四步:启动tomcat 访问:http://localhost:6666/solr/ 访问到就安装成功了,6666是我tomcat的端口。
二、多核配置
多核就是多个服务 ,比如搜各个分类每个分类一个索引
1、进入apache-solr-3.6.2\example\multicore目录拷贝core0、core1(名称可改任意多个不限)到apache-tomcat-7.0.39\solr\目录下
2、配置apache-tomcat-7.0.39\solr\solr.xml 新增如下代码
<core name="core0" instanceDir="core0" />
<core name="core1" instanceDir="core1" />
配置完成访问多核只需在原有访问路径基础上加core名称即可。
三、外面mysql数据导入到索引
1、在apache-tomcat-7.0.39\solr\conf 目录新建db-data-config.xml 内容如下
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://地址:3306/库名"
user="用户名"
password="密码"/>
<document>
<entity name="id"
query="select id,description from d_city">
</entity>
<field column="id" name="solr_id"/>
<field column="description" name="solr_description"/>
</document>
</dataConfig>
2、配置apache-tomcat-7.0.39\solr\conf目录下的solrconfig.xml加入如下内容:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">db-data-config.xml</str>
</lst>
</requestHandler>
3、将apache-solr-3.6.2\example\lib的jar包导入apache-tomcat-7.0.39\webapps\solr\WEB-INF\lib下 。
访问:http://localhost:6666/solr/dataimport?command=full-import 即可建立索引
四、索引访问代码:建立索引
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.common.SolrInputDocument;
public class InitDocumnet {
static {
long begin=System.currentTimeMillis() ;
String url = "http://localhost:6666/solr/" ;
try{
HttpSolrServer server = new HttpSolrServer( url );
server.setMaxRetries(1); // defaults to 0.> 1 not recommended.
server.setConnectionTimeout(5000); // 5 seconds to establish TCP
server.setParser(new XMLResponseParser()); // binary parser is used by default
server.setSoTimeout(1000);// socket read timeout
server.setDefaultMaxConnectionsPerHost(100);
server.setMaxTotalConnections(100);
server.setFollowRedirects(false);// defaults to false
server.setAllowCompression(true);
for(int i=1;i<10;i++){
SolrInputDocument doc1 = new SolrInputDocument();
doc1.addField( "id",i+"1");
doc1.addField( "name", "00网传一份北京大学权威认定的中国最顶级中学名录,在网上被热炒,不少网友表示自己的母校位列其中。在这份名录中,上海上榜4所学校,分别为上海中学,华师大二附中,复旦附中,七宝中学。你的母校上榜了吗?图via清华南都"+i);
server.add(doc1) ;
}
server.commit() ;
System.out.println(System.currentTimeMillis()-begin) ;
}catch(Exception ex){
ex.printStackTrace() ;
}
}
static public void main(String[] args){
long begin=System.currentTimeMillis() ;
new InitDocumnet() ;
System.out.println(System.currentTimeMillis()-begin) ;
}
删除索引:
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.impl.XMLResponseParser;
import org.apache.solr.common.SolrInputDocument;
public class DelDocumnet {
static {
long begin=System.currentTimeMillis() ;
String url = "http://localhost:6666/solr/" ;
try{
HttpSolrServer server = new HttpSolrServer( url );
server.setMaxRetries(1); // defaults to 0.> 1 not recommended.
server.setConnectionTimeout(5000); // 5 seconds to establish TCP
server.setParser(new XMLResponseParser()); // binary parser is used by default
server.setSoTimeout(1000);// socket read timeout
server.setDefaultMaxConnectionsPerHost(100);
server.setMaxTotalConnections(100);
server.setFollowRedirects(false);// defaults to false
server.setAllowCompression(true);
server.deleteByQuery("*:*");
server.commit() ;
System.out.println(System.currentTimeMillis()-begin) ;
}catch(Exception ex){
ex.printStackTrace() ;
}
}
static public void main(String[] args){
long begin=System.currentTimeMillis() ;
System.out.println(System.currentTimeMillis()-begin) ;
}
}
查询索引:
import java.util.Iterator;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
public class SearchTest {
public static void main(String[] args) {
// 实例化SolrServer,以获取与solrServer的通信
String url = "http://localhost:6666/solr/" ;
SolrServer server = new HttpSolrServer(url);
// 创建查询参数以及设定的查询参数
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.setRows(2000);
//query.addHighlightField("webTitle");// 高亮字段
//query.addHighlightField("webContent");// 高亮字段
//query.setFacet(true)
// .setFacetMinCount(12)
// .setFacetLimit(5);//段
// query.setQuery("e");
// query.setQuery("id:长江2");
// query.setQuery("1");
// 查询并获取相应的结果!
QueryResponse response = null;
try {
response = server.query(query);
SolrDocumentList docs = response.getResults();
//Get the results
// Iterator<SolrDocument> itDocs = response.getResults().iterator();
Iterator<SolrDocument> itDocs = docs.iterator();
if (response.getResults().getNumFound() > 10) {
System.out.println("显示前10项相关结果");
}
if (!itDocs.hasNext()) {
//如果没有任何返回结果
System.out.println("no any result! ");
}
while (itDocs.hasNext()) {
SolrDocument resultDoc = itDocs.next();
String content = (String) resultDoc.getFieldValue("description");
String id = (String) resultDoc.getFieldValue("id");
System.out.println("Content: " + content + "Id: " + id);
}
System.out.println("文档个数:"+ docs.getNumFound());
System.out.println("查询时间:" + response.getQTime());
} catch (SolrServerException e) {
System.err.println(e.getMessage());
e.printStackTrace();
} catch (Exception e) {
System.err.println(e.getMessage());
e.printStackTrace();
} finally {
}
}
}
页:
[1]