文档章节

Solr的安装部署及简单使用

Fraud
 Fraud
发布于 2016/01/05 14:33
字数 1568
阅读 9079
收藏 10

由于demo项目使用的是maven构建,maven仓库用的是oschina的,此时solr的最新版本是5.4,而oschina中的solrj最新版本是5.3.1,所以我们为了保持一致性,也将下载5.3.1的solr作为演示


一、下载

    首先需要下载solr5.3.1,具体下载此处略。

二、安装

    1,解压tomcat(此处使用的是tomcat 7)

    2,解压solr5.3.1

    3,将 solr-5.3.1\server\solr-webapp 文件夹底下的 webapp 复制到  tomcat  对应目录底下的 webapps 中,并将文件夹名字改为 solr(自己指定其他的名字也是可以的)

    4,将 solr-5.3.1\server\lib\ext 文件夹底下的lib全部复制到tomcat底下的 solr/WEB-INF/libs/ 中

    5,复制 log4j.properties到tomcat底下solr对应的classes文件夹下(classes需要创建)

    6,复制 solr-5.3.1\server\solr 文件夹到自己指定的目录,此目录需要在下一步骤里填写(也可以不复制,直接引用)

    7,修改tomcat底下的solr对应的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 里的值替换为刚才第5步的路径。

三、启动tomcat,查看安装结果

    http://localhost:8080/solr/

    注:solr下载下来后,也可以使用自带的命令来启动,这里是因为需要配合java web项目,才放在tomcat里做演示使用


以上,我们就将solr安装到tomcat底下,但是仍然没有和我们的java项目结合起来使用,同时也没有加入对应的中文分词。接下来将继续讲下面的部分。


四、添加自定义solr

在刚才定义的 

solr/home

文件夹底下,新建一个文件夹  my_solr,在my_solr目录中新建core.properties内容为name=mysolr   (solr中的mysolr应用),同时将下载下来的solr-5.3.1解压文件中的 server/solr 文件夹的复制到my_solr目录底下

五、配置中文分词,以mmseg4j为例

    1,下载jar包(mmseg4j-core-1.10.0.jar、mmseg4j-solr-2.3.0.jar),并复制到tomcat底下的 solr/WEB-INF/libs/ 中

    2,配置my_solr文件夹中的schema.xml,在尾部新增

<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="d:/my_dic" />
	</analyzer>
</fieldtype>

    3,重启tomcat,查看效果

六、java中调用

    1,在上面说的schema.xml中,添加

<field name="content_test" type="textMaxWord" indexed="true" stored="true" multiValued="true"/>

    2,新建测试类

package demo.test;

import org.apache.solr.client.solrj.*;
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 java.io.IOException;
import java.util.ArrayList;
import java.util.List;
 
/**
 * solr 5.3.0
 * Created by daxiong on 2015/10/23.
 */
public class MySolr {
 
	//solr url
    public static final String URL = "http://localhost:8080/solr";
    //solr应用
    public static final String SERVER = "mysolr";
    //待索引、查询字段
    public static String[] docs = {"Solr是一个独立的企业级搜索应用服务器",
                                    "它对外提供类似于Web-service的API接口",
                                    "用户可以通过http请求",
                                     "向搜索引擎服务器提交一定格式的XML文件生成索引",
                                    "也可以通过Http Get操作提出查找请求",
                                    "并得到XML格式的返回结果"};
 
    public static SolrClient getSolrClient(){
        return new HttpSolrClient(URL+"/"+SERVER);
    }
 
    /**
     * 新建索引
     */
    public static void createIndex(){
        SolrClient client = getSolrClient();
        int i = 0;
        List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>();
        for(String str : docs){
            SolrInputDocument doc = new SolrInputDocument();
            doc.addField("id",i++);
            doc.addField("content_test", str);
            docList.add(doc);
        }
        try {
            client.add(docList);
            client.commit();
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    };
 
    /**
     * 搜索
     */
    public static void search(){
        SolrClient client = getSolrClient();
        SolrQuery query = new SolrQuery();
        query.setQuery("content_test:搜索");
        QueryResponse response = null;
        try {
            response = client.query(query);
            System.out.println(response.toString());
            System.out.println();
            SolrDocumentList docs = response.getResults();
            System.out.println("文档个数:" + docs.getNumFound());
            System.out.println("查询时间:" + response.getQTime());
            for (SolrDocument doc : docs) {
                System.out.println("id: " + doc.getFieldValue("id") + "      content: " + doc.getFieldValue("content_test"));
            }
        } catch (SolrServerException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        createIndex();
        search();
    }
}

    3,查看执行结果

{responseHeader={status=0,QTime=23,params={q=content_test:搜索,wt=javabin,version=2}},response={numFound=2,start=0,docs=[SolrDocument{id=0, content_test=[Solr是一个独立的企业级搜索应用服务器], _version_=1522509944966873088}, SolrDocument{id=3, content_test=[向搜索引擎服务器提交一定格式的XML文件生成索引], _version_=1522509945343311874}]}}

文档个数:2
查询时间:23
id: 0      content: [Solr是一个独立的企业级搜索应用服务器]
id: 3      content: [向搜索引擎服务器提交一定格式的XML文件生成索引]


七,与数据库整合

    我们通常查询的数据都是在数据库(或缓存数据库),这里以mysql作为示例。

    1,进入my_solr/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>

这个是用来配置导入数据的配置文件

    2,增加完后,再在同级目录增加 data-config.xml 文件,文件内容如下

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource type="demoDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/demo" user="root" password="" batchSize="-1" />
    <document>
        <entity name="t_user" pk="id" query="SELECT * FROM t_user">
            <field column="username" name="username" />
        </entity>
    </document>
</dataConfig>

其中配置的字段请填写自己数据库的相应配置。

    3,然后打开 schema.xml ,在其中增加如下代码

<field name="username" type="text_general" indexed="true" stored="true" required="true" multiValued="true" />

这里的username和上面的username对应,用作查询使用。

    4,打开solr管理后台 http://localhost:8080/solr/#/mysolr ,点击左侧菜单“Dataimport“,默认勾选项即可,点击”Excute“按钮,这时会按照刚才的配置导入相应的数据到solr中,执行完成后会出现如下截图(执行时间可能会比想象的要长一点)


以上,我们就将mysql和solr关联了起来。接下来,我们可以点击左侧菜单”Query“,在”q“所在的对话框下,输入对应的搜索关键词,例如:username:张三,然后点击”Excute Query“按钮,就可以在右侧看到查询结果

那么怎么在java中调用,得到自己要的查询结果呢?

现在我知道的是两种方法:

1,使用http访问,返回对应的json数据

2,使用SolrQuery调用(上述已有示例代码)

相应的高级查询方法,后续如果有时间会继续补充。

    

© 著作权归作者所有

Fraud
粉丝 40
博文 36
码字总数 25050
作品 0
程序员
私信 提问
Solr环境搭建及IK分词的集成及solrJ的调用(一)

项目需要,最近在做使用solr进行搜索的项目。 solr是一个基于lucene的java开发的搜索服务器,简单点说solr是一个已经完成的war包,直接部署起来即可。 solr的安装比较简单,但是第一次使用,...

王小明123
2013/04/08
2.3K
0
CentOS下安装Solr5.3

https://lucene.apache.org/solr/ 前言 Solr现在是一个独立的服务器。 从Solr5.0开始,Solr不再发布为在任何Servlet容器中部署的“war”Web应用程序包(Web Application Archive)。Solr现在...

沉淀岁月
2016/09/08
16
0
在 Ubuntu 12.04 LTS 上通过 Tomcat 部署 Solr 4

这个简短的教程描述了如何在 Ubuntu Server 上安装 Solr 4,我使用的版本是:Ubuntu Server 12.04 和 Apache Solr 4.0-BETA. 我同时将展示如何测试安装以及执行一个简单的索引和查询任务。 ...

红薯
2012/09/24
6.8K
11
solrCloud+tomcat+zookeeper集群配置

http://www.tuicool.com/articles/NNjAFr 概述: SolrCloud 是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。 它有几个特色功能: 1)集中式的...

毛朱
2015/05/06
324
2
Solr安装及集成javaWeb

1.下载solr-4.7.1 http://www.apache.org/dyn/closer.cgi/lucene/solr/4.7.1 环境需求:java 1.6版本以上;solr运行需要java serverlet 容器,默认使用jetty,或者tomcat,jboss等等。 2.To...

一枚Sir
2014/04/14
11.3K
4

没有更多内容

加载失败,请刷新页面

加载更多

CSS中实现图片垂直居中

在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中...

前端老手
45分钟前
4
0
vue学习笔记5:vue富文本编辑器ueditor的组件封装及问题

做一个后台,离不开文本编辑器,百度的ueditor经常用,这次改用vue写后台,需要再次集成一下,遇到很多问题,搞了一下午,整理一下,希望能够帮到后来者。 目标: 希望封装的ueditor组件,尽...

Jack088
56分钟前
5
0
MFC多线程编程之四——线程的同步

八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成...

rainbowcode
今天
3
0
QWIDGET、QMAINWINDOW、QFRAME、QWINDOW、QDIALOG、QSCROLLAREA区别

QWindow一般不用 QDialog对话框而已 QScrollArea有滚动条的窗口。 from PyQt5.QtWidgets import (QWidget,QListWidget,QLabel,QApplication,QScrollArea,QFrame,QAction,QVBoxLayout,QLis......

shzwork
今天
3
0
CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部