`
sinykk
  • 浏览: 356944 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

solr 的使用及安装

 
阅读更多

注本文以solr3.3为例

 

Solr 简介

  Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。
       Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。
       Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene 。

==================================================

WINDOWS/linux SOLR安装

【linux参考】:http://sinykk.iteye.com/admin/blogs/1171098

【windows如下】

==================================================

环境参数:

Tomcat 7
Solr apache-solr-3.3.0
Jdk 1.6
Windows

搭建步骤:

1. 下载所需软件,安装配置Tomcat。

下载软件为 :Tomcat与Solr,jdk1.6,官网都可免费下载。

2. Tomcat 配置文件conf\server.xml

添加编码的配置 URIEncoding="UTF-8" (如不添加,中文检索时因为乱码搜索不到)。
添加后为:
<Connector port="8983" protocol="HTTP/1.1" connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" />

 

4. 将D:\solr\apache-solr-3.3.0 解压

5. 建立d:/solr/home主目录(可以根据自己的情况建立),把D:\solr\apache-solr-3.3.0\example\solr复制到该目录下。

6. 建立solr.home 环境变量:置为 d:/solr/home

7. 将solr.War复制到tomcat的webapp下启动是会自动解压。

8. 修改D:\resouce\java\tomcat\webapps\solr\WEB-INF\web.xml.

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>d:\solr\home</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>
9. 启动tomcat,浏览器输入:http://localhost:8080/solr/
10.看到页面说明部署成功

 

 

==================================================

solr 将MYSQL数据库做成索引数据源【注意格式】

参考:http://digitalpbk.com/apachesolr/apache-solr-mysql-sample-data-config

==================================================

 

1、在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,代码如下

 

<dataConfig>
    <dataSource type="JdbcDataSource"
   driver="com.mysql.jdbc.Driver"
   url="jdbc:mysql://localhost/test"
   user="root"
   password=""/>
    <document name="content">
        <entity name="node" query="select id,name,title from solrdb">
            <field column="nid" name="id" />
            <field column="name" name="name" />
            <field column="title" name="title" />
        </entity>
    </document>
</dataConfig>
 

3、创建schema.xml语法,代码如下

 

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.4">
  <types>    
     <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>

     <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>

     <fieldType name="text" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

     <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>  
</types>


 <fields>
   <field name="id" type="string" indexed="true" stored="true" required="true" /> 
   <field name="title" type="string" indexed="true" stored="true"/>
   <field name="contents" type="text" indexed="true" stored="true"/>
 </fields>

 <uniqueKey>id</uniqueKey>
 <defaultSearchField>contents</defaultSearchField>
 <solrQueryParser defaultOperator="OR"/>
<copyField source="title" dest="contents"/>

</schema>

 

schema.xml 里重要的字段

要有这个copyField字段SOLR才能检索多个字段的值【以下设置将同时搜索 title,name,contents中的值】
<defaultSearchField>contents</defaultSearchField>
copyField是用來複製你一個欄位裡的值到另一欄位用. 如你可以將name裡的東西copy到default裡, 這樣solr做檢索時也會檢索到name裡的東西.
<copyField source="name" dest="contents"/>
<copyField source="title" dest="contents"/>

 

4、创建索引

http://192.168.171.129:8983/solr/dataimport?command=full-import

 

注:保证与数据库连接正确

 

==================================================

solr 创建增量索引

主要是修改data-config.xml 数据源

==================================================

 

<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/demo" user="root" password=""/>
    <document name="products">
       <entity name="item" pk="id"
          query="SELECT id,title,contents,last_index_time FROM solr_articles"
          deltaImportQuery="SELECT id,title,contents,last_index_time FROM solr_articles
            WHERE id = '${dataimporter.delta.id}'"
          deltaQuery="SELECT id FROM solr_articles
            WHERE last_index_time > '${dataimporter.last_index_time}'">
        </entity>
    </document>
</dataConfig>
 

注意数据库相关表的创建

如本例中 solr_articles表中有 last_index_time(timestamp)字段,每当增加或者更新了值都应修改last_index_time的值,以便增量索引能更新到

有问题请即时查看TOMCAT的LOG日志文件

 

运行:http://192.168.171.129:8983/solr/dataimport?command=delta-import

如果运行后未达到你的预期,请查看dataimport.properties文件的日期,并组合新SQL语句查询来调整问题

 

 

==================================================

multiple core(SOLR多个索引共存)

参考:http://wiki.apache.org/solr/CoreAdmin

==================================================

1、配置多个索引

 

<solr persistent="true" sharedLib="lib">
 <cores adminPath="/admin/cores">
  <core name="core0" instanceDir="core0" dataDir="D:\solr\home\core0\data"/>
  <core name="core1" instanceDir="core1" dataDir="D:\solr\home\core1\data" />
 </cores>
</solr>
 

 

2、将D:\solr\apache-solr-3.3.0\example\multicore下的 core0,core1两个文件拷贝到D:\solr\home下,D:\solr\home目录下之前的任务目录及文件不变

注:D:\solr\home目录为D:\solr\apache-solr-3.3.0\example\solr


3、建立两个索引数据存放目录
D:\solr\home\core0\data
D:\solr\home\core1\data

4、修改其中一个索引如CORE1
修改solrconfig.xml为如下代码
【注 需要加入 lib 标签主要是因为DataImportHandler 为报错,这可能是官方的BUG】

<?xml version="1.0" encoding="UTF-8" ?>
<config>
  <luceneMatchVersion>LUCENE_33</luceneMatchVersion>
  <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>

  <lib dir="D:/solr/apache-solr-3.3.0/contrib/extraction/lib" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-cell-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-clustering-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/contrib/clustering/lib/" />
  <lib dir="/total/crap/dir/ignored" /> 
  <updateHandler class="solr.DirectUpdateHandler2" />

  <requestDispatcher handleSelect="true" >
    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />
  </requestDispatcher>
  
  <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />
  <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />
  <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
  <admin>
    <defaultQuery>solr</defaultQuery>
  </admin>
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">   
		  <lst name="defaults">   
			   <str name="config">data-config.xml</str>   
		  </lst>   
</requestHandler>
</config>
 

最后运行 http://localhost:8080/solr/core1/admin/

 

==================================================

定时更新SOLR索引

因SOLR的索引更新是经过HTTP的,所以不能直接使用CRON,现在我们换一种方式

将要访问的HTTP写入到PHP文件中,经过定时运行PHP文件来达到更新SORL索引目录

10/* * * * * /usr/local/php/bin/php /yym/cronfile/solr_cron.php?t=index_delta


==================================================

 

/*
 * Created on 2011-9-15
 * @author tianyongchun
 * 此文件用于定时更新SOLR的索引
 * @param t为更新类型 带不同的参考更新不同的索引
 * 
 * 此文件可以通过LINUX的CRON方法运行以便达到定时更新索引
 */
 set_time_limit(0);
 /**
  * 
  * 增量更新
  * index_delta
  * 全更新
  * index_full
  * 
  * 
  */
 $t = $_GET['t'];
 //http://192.168.171.129:8983/solr/dataimport?command=delta-import
 $url = 'http://localhost:8983/solr/dataimport?command=';
 $r = 'result error';
 if($t =='index_delta'){
 	$r = file_get_contents($url.'delta-import');
 }else if($t =="index_full"){
 	$r = file_get_contents($url.'full-import');
 }else{
 	echo 'param error';
 }
 var_dump($r);
?>
 

 

 

 

==================================================

solr 的PHP客户端

solr-php-client

==================================================

从名字就可以看出,这是 Solr 的 PHP 客户端开发包。
通过这个包可以像
http://code.google.com/p/solr-php-client/downloads/list

 

 

==================================================

常见错误 org.apache.solr.common.SolrException: Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler
==================================================
将solrconfig.xml中的值改为如下:【主要是指定SOLR的主目录路径出错】

  <lib dir="D:/solr/apache-solr-3.3.0/contrib/extraction/lib" />
  <!-- When a regex is specified in addition to a directory, only the
       files in that directory which completely match the regex
       (anchored on both ends) will be included.
    -->
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-cell-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-clustering-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />

  <!-- If a dir option (with or without a regex) is used and nothing
       is found that matches, it will be ignored
    -->
  <lib dir="D:/solr/apache-solr-3.3.0/contrib/clustering/lib/" />


-----------------------------
   
I experienced the same issue. With Solr 1.x, I was copying out the
'example' directory to make my solr installation. However, for the
Solr 3.x distributions, the DataImportHandler class exists in a
directory that is at the same level as example: "dist", not a
directory within.

You'll either want to take the entire apache 3.1 directory, or modify
solrconfig to point to the new place you've copied it:

  <lib dir="../../dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />

 

==================================================

solr搜索不出数据

==================================================



SELECT id,title,main_contents as contents,last_index_time FROM solr_articles
要使用<field column="NAME" name="name" />最好将schema.xml中通过field配置相应的名字

 

 

==================================================

solr 分布式(复制)配置

参考:http://hi.baidu.com/648636045/blog/item/3985aaf1f8f150d00a46e080.html

==================================================

 

 

 

 

 

分享到:
评论

相关推荐

    solr的安装与使用

    Solr安装与使用 Solr是一款功能强大的搜索引擎,能够帮助我们快速搭建企业搜索平台。在本文中,我们将详细介绍Solr的安装和使用过程。 一、安装Solr 首先,我们需要下载Solr的安装包。这里我们使用的是Solr 1.3...

    solr7.4集群安装

    Solr 7.4 集群安装是一个关键的IT任务,涉及到分布式搜索和数据分析的基础设施建设。Apache Solr是一款开源的企业级搜索平台,能够处理大量数据并提供快速、高效的全文检索服务。在Solr 7.4版本中,它引入了多项改进...

    solr4.9安装使用手册

    Solr 是一个开源的全文搜索引擎,它提供...理解Solr的核心概念,如核心、字段类型和索引,对于有效地使用和管理Solr至关重要。同时,保持对最新官方文档的了解,能够帮助你解决可能出现的问题,提升你的Solr应用能力。

    solr搜索服务器安装配置

    ### Solr搜索服务器安装配置详解 #### 一、Solr简介 Apache Solr是一款开源的高性能全文搜索引擎,基于Lucene库构建。它采用Java开发,提供了丰富的API接口,支持多种编程语言,使得开发者能够轻松地集成搜索功能到...

    solr的安装使用步骤

    ### Solr的安装使用步骤详解 #### Solr概述与特性 **Solr** 是 Apache 下的一个顶级开源项目,它基于 **Lucene** 进行构建,提供了强大的全文搜索能力。相较于 Lucene,Solr 提供了更为丰富的查询语言支持,并且...

    ubuntu下安装solr4.9详细介绍

    文档中详细介绍了如何在ubuntu下面安装solr-4.9.0,以及在安装过程中出现的问题和解决办法

    ambari离线安装solr所需文件

    在本案例中,我们将关注如何使用Ambari进行Solr的离线安装。 Solr是Apache Lucene项目的一部分,是一个全文搜索引擎服务器。它允许用户通过HTTP接口来索引和搜索大量数据,广泛应用于企业级搜索应用。为了在没有...

    solr安装到Linux系统

    在Linux系统上如何搭建了solr搜索服务,同时运用到项目中

    使用docker 部署solr

    centos7 环境 安装docker 并在docker 中部署solr 并使用

    solr安装配置

    本文将详细介绍如何在本地环境中安装和配置 Solr。 首先,我们需要准备的环境是 JDK 和 Tomcat。Solr 建立在 Java 之上,所以必须先安装 JDK 1.6 或以上版本。在安装 JDK 后,需要设置相应的环境变量,例如 `JAVA_...

    Solr安装部署攻略

    Solr安装部署攻略 在大数据和云计算的时代,全文检索服务成为了数据检索的重要工具。Apache Solr,作为一款高效、可扩展的开源全文检索服务器,被广泛应用于各类信息搜索场景。本教程将指导你如何安装并部署Solr ...

    Solr(Cloudera)使用手册

    ### Solr(Cloudera)使用手册 #### 一、创建Collection与管理实例 在使用Solr(Cloudera)时,创建Collection是基本的操作之一。Collection是Solr中的数据存储单元,相当于关系数据库中的表。 ##### 创建路径与实例 ...

    solr课件还有安装原件

    在本套课件中,我们将深入探讨Solr的核心概念、安装配置以及Ik分词器的使用。 首先,让我们从"solr.docx"开始。这可能是一个包含Solr基础教程的文档,涵盖了Solr的基本概念,如索引、查询、优化和集群配置。Solr的...

    solr介绍及使用.docx

    确保你的系统已经安装了 JDK 及相应的运行环境,Solr 需要在 Java 1.6 或更高版本的 JVM 上运行。接着,将下载的 Solr 解压并将相关文件复制到 Tomcat 的 webapps 目录下,创建 Solr 的工作目录(solrHome),并配置...

    tomcat和solr的配置安装过程

    "Tomcat 和 Solr 的配置安装过程" 在本文中,我们将详细介绍 Tomcat 和 Solr 的配置安装过程。Tomcat 是一个开源的 Web 服务器软件,而 Solr 是一个基于 Lucene 的搜索服务器。它们都是 Java 语言开发的,因此可以...

Global site tag (gtag.js) - Google Analytics