solr的安装与使用
http:lo
solr的介绍:
Solr是一个独立的企业级搜索应用服务器,它对外提供API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML格式,生成索引(solr生成倒排索引,数据库生成索引是二叉索引,效率差距很大);也可以通过发HTTP get操作提出查询请求,并得到XML格式的返回结果,Solr是一个类似于GOOgle或者Bing的 全文检索引擎,Solr是与搜索引擎优化(SEO)相关联的。很多公司也使用
elasticearth作为搜索引擎。
Solr与elasticearth性能比较:请参照:http://www.cnblogs.com/chowmin/articles/4629220.html。
下面我们就Solr安装,我用的是5.0.0版本,要求JDK1.7+;
一。Solr安装
Solr是apache旗下的免费项目。可以去www.apache.org官网下载。
1.下载以后解压D:\solr-5.0.0

2.运行更简单,我知道的三种运行方式:
第一种启动方式:dos模式下进入bin目录然后执行命令:
第二种启动方式:dos模式下进入servermul执行命令:

第三种启动方式:在tomcat中启动,我们只需要把server目录中的webapps下的solr.war取出来放入tomcat的webapp目录就行

3.浏览器运行查看是否成功:前两种:执行 http://localhost:8983/solr

看到这个页面就完成solr的启动了。
二。新建core模块
启动solr以后,我们如何使用呢?。
我们可以把solr看成一个数据库。数据库启动了,如何使用呢?。那就是建表。
我们把core当成solr服务器的创建表。
1.首先:我们找到安装solr目录下server目录下的solr目录,比如我的是:
D:\solr-5.0.0\server\solr

2.我们创建core的文件夹。 我创建的core的名字为artcile文件,里面创建data文件夹和conf文件

3.然后我们找到如下图,所示的位置。把conf整个文件夹复制到我们,刚刚创建的conf中。覆盖就行,

4.这样我们完成了文件夹的准备工作:然后我们启动solr。进入solr的管理页面中来:

大家看到左边有个 core admin菜单,点进去。

看到add core 按钮,在点进入

这个
然后我们点击 add core按钮。完成了core的创建。
如何查看我们刚刚创建的core,

看到 core selector这个选择框了没,点击一下,你就能看到我们刚刚创建的core

选中。以后我们会看到如下的界面:

这就完成了core的创建了,
创建core以后那么我们如何在java中使用的
三。solr的java 使用。
直接看代码:
package com.demo.web.solr.PDF; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.UpdateRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; public class SolrInsertTest { //solr 服务器地址 public static final String solrServerUrl = "http://localhost:8983/solr"; //solrhome下的core public static final String solrCroeHome = "artcile"; SolrClient solrclient; public SolrInsertTest(){ this.solrclient=new HttpSolrClient(solrServerUrl + "/" + solrCroeHome); } //增加文档:addDucument() @Test public void addDucument() throws IOException{ System.out.println("======================add doc ==================="); Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); for (int i =6; i < 9; i++) { SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", i*100); doc.addField("name", "user"+i); doc.addField("price", "100"); doc.addField("description", "新增文档"+i); doc.addField("doc", "d09ffe7ec68744ceb342a658be6e2c1a"); docs.add(doc); } try { UpdateResponse rsp = solrclient.add(docs); // UpdateResponse rsp = solrclient.addBean(docs); System.out.println("Add doc size" + docs.size() + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime()); UpdateResponse rspcommit = solrclient.commit(); System.out.println("commit doc to index" + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime()); } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //@Test public void queryDocuments(){ System.out.println("-----------查询文档:queryDocuments()----------- "); SolrQuery params = new SolrQuery(); System.out.println("======================query==================="); params.set("q", "*:*"); params.set("start", 0); params.set("rows", 20); params.set("sort", "id asc"); try { QueryResponse rsp = solrclient.query(params); SolrDocumentList docs = rsp.getResults(); System.out.println("查询内容:" + params); System.out.println("文档数量:" + docs.getNumFound()); System.out.println("查询花费时间:" + rsp.getQTime()); System.out.println("------query data:------"); for (SolrDocument doc : docs) { // 多值查询 @SuppressWarnings("unchecked") String id = doc.getFieldValue("id").toString(); String name = (String) doc.getFieldValue("name"); String price = String.valueOf(doc.getFieldValue("price")); String des = (String) doc.getFieldValue("description"); List<String> dock = (List)doc.getFieldValue("doc"); System.out.println("id:"+id+"\t name:" + name + "\t description:"+des+"\t price:"+price+"\t doc:"+dock ); } System.out.println("-----------------------"); } catch (Exception e) { e.printStackTrace(); } } //@Test public void deleteById(String id) { System.out.println(" -----------删除文档BY ID:deleteById()----------- "); System.out.println("======================deleteById ==================="); try { UpdateResponse rsp = solrclient.deleteById(id); solrclient.commit(); System.out.println("delete id:" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime()); } catch (SolrServerException | IOException e) { e.printStackTrace(); } } // -----------删除文档BY QUERY:deleteByQuery()----------- public void deleteByQuery(String query) { System.out.println("======================deleteByQuery ==================="); UpdateResponse rsp; try { UpdateRequest commit = new UpdateRequest(); commit.deleteByQuery(query); commit.setCommitWithin(500); commit.process(solrclient); System.out.println("url:"+commit.getPath()+"\t xml:"+commit.getXML()+" method:"+commit.getMethod()); // rsp = client.deleteByQuery(query); // client.commit(); // System.out.println("delete query:" + queryCon + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime()); } catch (SolrServerException | IOException e) { e.printStackTrace(); } } //-----------更新文档:updateDocuments()----------- //@Test public void updateDocuments(int id,String fieldName, Object fieldValue) { System.out.println("======================updateField ==================="); HashMap<String, Object> oper = new HashMap<String, Object>(); // 多值更新方法 // List<String> mulitValues = new ArrayList<String>(); // mulitValues.add(fieldName); // mulitValues.add((String)fieldValue); oper.put("set", fieldValue); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", id); doc.addField(fieldName, oper); try { UpdateResponse rsp = solrclient.add(doc); System.out.println("update doc id:" + id + " result:" + rsp.getStatus() + " Qtime:" + rsp.getQTime()); UpdateResponse rspCommit = solrclient.commit(); System.out.println("commit doc to index" + " result:" + rspCommit.getStatus() + " Qtime:" + rspCommit.getQTime()); } catch (SolrServerException | IOException e) { e.printStackTrace(); } } public static void main(String args[]) throws IOException { SolrInsertTest test = new SolrInsertTest(); //添加文档 test.addDucument(); // 删除文档 //test.deleteById("200"); test.deleteByQuery("name:user3"); //更新文档 test.updateDocuments(400, "name", "user新"); // 查询文档 test.queryDocuments(); } }
java开发步骤:
1.创建连接

2.完成我们参数的引入

3.提交我们的参数增加到solr服务器中

开发注意:.首先大多数回报错,说找不到某个Filed ,或者Http请求405错误。
这种错误解决:
第一种。必须看清楚solr服务器地址里面有带 #,然而我们代码开发中不需要。
第二种:就是我们参数输入的时候,像我们现在用的参数,id.name,price,description,doc这些我们必须在solr中有才行。
就像我们表中的字段是一个意思,我们必须在solr服务器找这些字段。
那么我们如何在solr服务器中设置我们需要的字段呢?
我们回到创建的artcile目录中,找到conf中的scheme.xml 如下图:

然后打开

在这里面我们可以看看我们solr服务器中默认给我们的字段,如果你需要别的字段,只需要,添加 field 然后name定义你想要的字段就行,
例如:我们刚刚测试的代码中,有个doc字段。我们就需要在这里添加,
添加完成以后我们可以去前台页面查看这个字段。
回到这个页面中

然后我们可以看到左边菜单中有个Analysis按钮
点击一下:你就能在这里查看刚刚添加的字段了,

至此完成真个solr的使用。

浙公网安备 33010602011771号