Learn Solr (b)

A, Solr Overview

1. What is Solr

Solr is an open source project under the top-level Apache, developed in Java, which is based on Lucene full-text search server. Solr provides a richer than Lucene query language, while achieving a configurable, scalable, and indexing, search performance is optimized.

Solr can run independently, running in Jetty, Tomcat Servlet container such as these, the implementation Solr index is very simple, with the POST method sends an XML document describing its content to Field Solr server, according to an xml document Solr add, delete, update index. Solr search only need to send an HTTP GET request, and then return query results Xml, json format of Solr parse, organize the page layout. Solr does not provide a function to build the UI, Solr provides a management interface, through the management interface can check the configuration and operation of Solr.

2. Download

Download Solr4.10.3 from Solr official website (http://lucene.apache.org/solr/), depending on the operating environment of Solr, under Linux need to download lucene-4.10.3.tgz, you need to download the windows lucene-4.10.3 .zip.

Solr Guide refer to: https: //wiki.apache.org/solr/FrontPage.

Download and unzip lucene-4.10.3.zip:

 

bin: solr running script

contrib: solr some contribution to the software / plug-ins to enhance solr functions.

dist: This directory contains build generated during war and jar files, and the associated dependencies.

docs: API documentation of solr

example: solr directory project examples:

l  example/solr:

         This is a directory that contains the default configuration information Solr's Core directory.

l  example/multicore:

         This directory contains a directory provided in a plurality of Core Solr in a multicore.

l  example/webapps:

    The directory includes a solr.war, the solr war as a running instance of the project.

licenses: solr some relevant licensing information

 Two, Solr installation and configuration under Windows

1, the operating environment

solr need to run a Servlet Container, Solr4.10.3 jdk requires the use of more than 1.7, the Solr default provider Jetty (java write Servlet containers), as this tutorial Tocmat Servlet container environment is as follows:

Solr:Solr4.10.3

Jdk:jdk1.7.0_72

Tomcat:apache-tomcat-7.0.53

2, Solr Tomcat integration

  • The dist \ solr-4.10.3.war copied to the Tomcat webapp directory renamed solr.war
  • After starting the tomcat, solr.war automatic decompression, delete the original solr.war.
  • Copy example \ at lib \ ext directory all the jar packages to the Tomcat webapp \ solr \ WEB-INF \ lib directory

  • Copy log4j.properties file

           webapps \ solr \ WEB-INF directory, create a file folder classes in Tomcat,

           Copy the Solr directory example \ under resources \ log4j.properties to Tomcat webapps \ solr \ WEB-INF \ classes directory

  • Creating solrhome and configuration files solrcore of solrconfig.xml
  • Modify Tomcat directory webapp \ solr \ WEB-INF \ web.xml file as follows:

Set Solr home

<!--配置jndi告诉solr工程我们的solrhome的位置-->
<env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>D:/temp/solr/solrhome</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

三、Linux下的Solr安装及配置

  • 第一步:安装linux、jdk、tomcat
[root@localhost ~]# ll
total 8044
-rw-r--r--. 1 root root 8234674 Oct 27  2013 apache-tomcat-7.0.47.tar.gz
[root@localhost ~]# tar -zxf apache-tomcat-7.0.47.tar.gz 
[root@localhost ~]# ll
total 8048
drwxr-xr-x. 9 root root    4096 Sep 10 17:55 apache-tomcat-7.0.47
-rw-r--r--. 1 root root 8234674 Oct 27  2013 apache-tomcat-7.0.47.tar.gz
[root@localhost ~]# mkdir /usr/local/solr
[root@localhost ~]# cp apache-tomcat-7.0.47 /usr/local/solr/tomcat
cp: omitting directory `apache-tomcat-7.0.47'
[root@localhost ~]# cp apache-tomcat-7.0.47 /usr/local/solr/tomcat -r
[root@localhost ~]# cd /usr/local/solr/
[root@localhost solr]# ll
total 4
drwxr-xr-x. 9 root root 4096 Sep 10 17:56 tomcat
[root@localhost solr]#
  • 第二步:把solr的压缩包上传到服务器。并解压
  • 第三步:把/root/solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下。并改名为solr.war
[root@localhost dist]# cp solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
  • 第四步:解压war包。启动tomcat自动解压。关闭tomcat。删除solr.war
  • 第五步:把/root/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
  • 第六步:创建solrhome。Solrhome是存放solr服务器所有配置文件的目录
[root@localhost example]# pwd
/root/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]#
  • 第七步:告诉solr服务器solrhome的位置

需要修改solr工程的web.xml文件:

  • 第八步:启动tomcat

 

 

四、Solr界面功能

 五、安装中文分词器

  • 第一步:使用IK-Analyzer。把分析器的文件夹上传到服务器
  • 第二步:需要把分析器的jar包添加到solr工程中
[root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
[root@localhost IK Analyzer 2012FF_hf1]#
  • 第三步:需要把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath
/usr/local/solr/tomcat/webapps/solr/WEB-INF/classes

[root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@localhost IK Analyzer 2012FF_hf1]# 

注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑

  • 第四步:配置fieldType。需要在solrhome/collection1/conf/schema.xml中配置

技巧:使用vi、vim跳转到文档开头gg。跳转到文档末尾:G

<fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

六、业务字段配置

业务字段判断标准:

1、在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述

2、后续的业务是否需要用到此字段。例如:商品id。

需要用到的字段:

1、商品id

2、商品title

3、卖点

4、价格

5、商品图片

6、商品分类名称

7、商品描述

需要在solrhome/collection1/conf/schema.xml末尾处配置

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

重新启动tomcat

 七、Java代码操作Solr服务

package com.taotao.rest.solrj;

import java.io.IOException;

import org.apache.solr.client.solrj.SolrQuery;
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;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class SolrTest
{
    /**
     * 添加文档测试
     * 
     * @throws SolrServerException
     * @throws IOException
     */
    @Test
    public void addDocumentTest() throws SolrServerException,
                                  IOException
    {
        // 创建一个连接
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // 创建一个文档对象
        SolrInputDocument docs = new SolrInputDocument();
        docs.addField("id", "test002");
        docs.addField("item_title", "测试商品2");
        docs.addField("item_price", 1000);
        // 把文档对象写入索引库
        solrServer.add(docs);
        // 提交
        solrServer.commit();
    }
    
    @Test
    public void deleteDocument() throws Exception
    {
        // 创建一个连接
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // solrServer.deleteById("test002");
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
    
    @Test
    public void queryDocument() throws Exception
    {
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // 创建一个查询对象
        SolrQuery query = new SolrQuery();
        // 设置查询条件
        query.setQuery("*:*");
        // 设置页数
        query.setStart(20);
        query.setRows(50);
        // 执行查询
        QueryResponse response = solrServer.query(query);
        // 查询结果
        SolrDocumentList solrDocs = response.getResults();
        System.out.println("一共有" + solrDocs.getNumFound() + "条数据");
        for (SolrDocument solrDocument : solrDocs)
        {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_price"));
            System.out.println(solrDocument.get("item_image"));
        }
    }
    
}

 

一、Solr概述

1、什么是Solr

Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。

Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr 索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,Solr根据xml文档添加、删除、更新索引 。Solr 搜索只需要发送 HTTP GET 请求,然后对 Solr 返回Xml、json等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。

2、下载

从Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,根据Solr的运行环境,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。

Solr使用指南可参考:https://wiki.apache.org/solr/FrontPage。

下载lucene-4.10.3.zip并解压:

 

bin:solr的运行脚本

contrib:solr的一些贡献软件/插件,用于增强solr的功能。

dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。

docs:solr的API文档

example:solr工程的例子目录:

l  example/solr:

         该目录是一个包含了默认配置信息的Solr的Core目录。

l  example/multicore:

         该目录包含了在Solr的multicore中设置的多个Core目录。

l  example/webapps:

    该目录中包括一个solr.war,该war可作为solr的运行实例工程。

licenses:solr相关的一些许可信息

 二、Windows下的Solr安装及配置

1、运行环境

solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下:

Solr:Solr4.10.3

Jdk:jdk1.7.0_72

Tomcat:apache-tomcat-7.0.53

2、Solr整合Tomcat

  • 将dist\solr-4.10.3.war拷贝到Tomcat的webapp目录下改名为solr.war
  • 启动tomcat后,solr.war自动解压,将原来的solr.war删除。
  • 拷贝example\lib\ext 目录下所有jar包到Tomcat的webapp\solr\WEB-INF\lib目录下

  • 拷贝log4j.properties文件

           在  Tomcat下webapps\solr\WEB-INF目录中创建文件 classes文件夹,

           复制Solr目录下example\resources\log4j.properties至Tomcat下webapps\solr\WEB-INF\classes目录

  • 创建solrhome及配置solrcore的solrconfig.xml文件
  • 修改Tomcat目录 下webapp\solr\WEB-INF\web.xml文件,如下所示:

设置Solr home

<!--配置jndi告诉solr工程我们的solrhome的位置-->
<env-entry>
    <env-entry-name>solr/home</env-entry-name>
    <env-entry-value>D:/temp/solr/solrhome</env-entry-value>
    <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

三、Linux下的Solr安装及配置

  • 第一步:安装linux、jdk、tomcat
[root@localhost ~]# ll
total 8044
-rw-r--r--. 1 root root 8234674 Oct 27  2013 apache-tomcat-7.0.47.tar.gz
[root@localhost ~]# tar -zxf apache-tomcat-7.0.47.tar.gz 
[root@localhost ~]# ll
total 8048
drwxr-xr-x. 9 root root    4096 Sep 10 17:55 apache-tomcat-7.0.47
-rw-r--r--. 1 root root 8234674 Oct 27  2013 apache-tomcat-7.0.47.tar.gz
[root@localhost ~]# mkdir /usr/local/solr
[root@localhost ~]# cp apache-tomcat-7.0.47 /usr/local/solr/tomcat
cp: omitting directory `apache-tomcat-7.0.47'
[root@localhost ~]# cp apache-tomcat-7.0.47 /usr/local/solr/tomcat -r
[root@localhost ~]# cd /usr/local/solr/
[root@localhost solr]# ll
total 4
drwxr-xr-x. 9 root root 4096 Sep 10 17:56 tomcat
[root@localhost solr]#
  • 第二步:把solr的压缩包上传到服务器。并解压
  • 第三步:把/root/solr-4.10.3/dist/solr-4.10.3.war包部署到tomcat下。并改名为solr.war
[root@localhost dist]# cp solr-4.10.3.war /usr/local/solr/tomcat/webapps/solr.war
  • 第四步:解压war包。启动tomcat自动解压。关闭tomcat。删除solr.war
  • 第五步:把/root/solr-4.10.3/example/lib/ext 目录下所有的jar包复制到solr工程中
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
  • 第六步:创建solrhome。Solrhome是存放solr服务器所有配置文件的目录
[root@localhost example]# pwd
/root/solr-4.10.3/example
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]#
  • 第七步:告诉solr服务器solrhome的位置

需要修改solr工程的web.xml文件:

  • 第八步:启动tomcat

 

 

四、Solr界面功能

 五、安装中文分词器

  • 第一步:使用IK-Analyzer。把分析器的文件夹上传到服务器
  • 第二步:需要把分析器的jar包添加到solr工程中
[root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr/WEB-INF/lib/
[root@localhost IK Analyzer 2012FF_hf1]#
  • 第三步:需要把IKAnalyzer需要的扩展词典及停用词词典、配置文件复制到solr工程的classpath
/usr/local/solr/tomcat/webapps/solr/WEB-INF/classes

[root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr/WEB-INF/classes
[root@localhost IK Analyzer 2012FF_hf1]# 

注意:扩展词典及停用词词典的字符集必须是utf-8。不能使用windows记事本编辑

  • 第四步:配置fieldType。需要在solrhome/collection1/conf/schema.xml中配置

技巧:使用vi、vim跳转到文档开头gg。跳转到文档末尾:G

<fieldType name="text_ik" class="solr.TextField">
    <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

六、业务字段配置

业务字段判断标准:

1、在搜索时是否需要在此字段上进行搜索。例如:商品名称、商品的卖点、商品的描述

2、后续的业务是否需要用到此字段。例如:商品id。

需要用到的字段:

1、商品id

2、商品title

3、卖点

4、价格

5、商品图片

6、商品分类名称

7、商品描述

需要在solrhome/collection1/conf/schema.xml末尾处配置

<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price"  type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" />

<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>
<copyField source="item_desc" dest="item_keywords"/>

重新启动tomcat

 七、Java代码操作Solr服务

package com.taotao.rest.solrj;

import java.io.IOException;

import org.apache.solr.client.solrj.SolrQuery;
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;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test;

public class SolrTest
{
    /**
     * 添加文档测试
     * 
     * @throws SolrServerException
     * @throws IOException
     */
    @Test
    public void addDocumentTest() throws SolrServerException,
                                  IOException
    {
        // 创建一个连接
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // 创建一个文档对象
        SolrInputDocument docs = new SolrInputDocument();
        docs.addField("id", "test002");
        docs.addField("item_title", "测试商品2");
        docs.addField("item_price", 1000);
        // 把文档对象写入索引库
        solrServer.add(docs);
        // 提交
        solrServer.commit();
    }
    
    @Test
    public void deleteDocument() throws Exception
    {
        // 创建一个连接
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // solrServer.deleteById("test002");
        solrServer.deleteByQuery("*:*");
        solrServer.commit();
    }
    
    @Test
    public void queryDocument() throws Exception
    {
        HttpSolrServer solrServer = new HttpSolrServer("http://192.168.1.123:8080/solr");
        // 创建一个查询对象
        SolrQuery query = new SolrQuery();
        // 设置查询条件
        query.setQuery("*:*");
        // 设置页数
        query.setStart(20);
        query.setRows(50);
        // 执行查询
        QueryResponse response = solrServer.query(query);
        // 查询结果
        SolrDocumentList solrDocs = response.getResults();
        System.out.println("一共有" + solrDocs.getNumFound() + "条数据");
        for (SolrDocument solrDocument : solrDocs)
        {
            System.out.println(solrDocument.get("id"));
            System.out.println(solrDocument.get("item_title"));
            System.out.println(solrDocument.get("item_price"));
            System.out.println(solrDocument.get("item_image"));
        }
    }
    
}

 

Guess you like

Origin www.cnblogs.com/wuhg/p/11842663.html