zhaolu 发表于 2016-12-14 10:59:43

solr 的使用及安装

注本文以solr3.3为例

Solr 简介
  
  Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现。

       Solr 主要特性有:强大的全文检索功能,高亮显示检索结果,动态集群,数据库接口和电子文档(Word ,PDF 等)的处理。而且Solr 具有高度的可扩展,支持分布搜索和索引的复制。

       Solr 底层的核心技术是使用Apache Lucene 来实现的,简单的说Solr 是Lucene 的服务器化。需要注意的是Solr 并不是简单的对Lucene 进行封装,它所提供的大部分功能都区别于Lucene 。
  ==================================================

  WINDOWS/linux SOLR安装

  【linux参考】:http://sinykk.iyunv.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
  ==================================================
页: [1]
查看完整版本: solr 的使用及安装