`
ssydxa219
  • 浏览: 608926 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论
阅读更多
1.下載 Apache Solr Search Integration module
2.下載 Apache solr 1.4 r22, 解壓到 apachesolr module 之下 eg. /sites/all/modules/apachesolr/SolrPhpClient
3.啟用模組的話, 你可以看到成功安裝 r22 的訊息(和連接 solr 錯誤的訊息)
Solr 是一个可供企业使用的、基于 Lucene 的开箱即用的搜索服务器。对Lucene不熟?那么建议先看看下面两篇文档:

实战Lucene,第 1 部分: 初识 Lucene:http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/

用Lucene加速Web搜索应用程序的开发:http://www.ibm.com/developerworks/cn/web/wa-lucene2/

一、 solr介绍

solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目。它的官方网址在http://lucene.apache.org/solr/ 。solr需要运行在一个servlet 容器里,例如tomcat5.5。solr在lucene的上层提供了一个基于HTTP/XML的Web Services,我们的应用需要通过这个服务与solr进行交互。

二、 solr安装和配置

关于solr的安装和配置,这里也有两篇非常好的文档,作者同时也是 Lucene Java 项目的提交人和发言人:

使用Apache Solr实现更加灵巧的搜索:http://www.ibm.com/developerworks/cn/java/j-solr1/index.html

http://www.ibm.com/developerworks/cn/java/j-solr2/index.html

下面主要说说需要注意的地方。

Solr的安装非常简单,下载solr的zip包后解压缩将dist目录下的war文件改名为solr.war直接复制到tomcat5.5的webapps目录即可。注意一定要设置solr的主位置。有三种方法。我采用的是在tomcat里配置java:comp/env/solr/home的一个JNDI指向solr的主目录(example目录下),建立/tomcat55/conf/Catalina/localhost/solr.xml文件。


<Context docBase="D:/solr.war" debug="0" crossContext="true" >

   <Environment name="solr/home" type="java.lang.String" value="D:/solr/solr" override="true" />

</Context>

     观察这个指定的solr主位置,里面存在两个文件夹:conf和data。其中conf里存放了对solr而言最为重要的两个配置文件schema.xml和solrconfig.xml。data则用于存放索引文件。

     schema.xml主要包括types、fields和其他的一些缺省设置。

solrconfig.xml用来配置Solr的一些系统属性,例如与索引和查询处理有关的一些常见的配置选项,以及缓存、扩展等等。

上面的文档对这两个文件有比较详细的说明,非常容易上手。注意到schema.xml里有一个

<uniqueKey>url</uniqueKey>
的配置,这里将url字段作为索引文档的唯一标识符,非常重要。

三、 加入中文分词

对全文检索而言,中文分词非常的重要,这里采用了qieqie庖丁分词(非常不错:))。集成非常的容易,我下载的是2.0.4-alpha2版本,其中它支持最多切分和按最大切分。创建自己的一个中文TokenizerFactory继承自solr的BaseTokenizerFactory。


/**

* Created by IntelliJ IDEA.

* User: ronghao

* Date: 2007-11-3

* Time: 14:40:59

* 中文切词 对庖丁切词的封装

*/

public class ChineseTokenizerFactory extends BaseTokenizerFactory {

    /**

     * 最多切分   默认模式

     */

    public static final String MOST_WORDS_MODE = "most-words";

    /**

     * 按最大切分

     */

    public static final String MAX_WORD_LENGTH_MODE = "max-word-length";

    private String mode = null;

    public void setMode(String mode) {

             if (mode==null||MOST_WORDS_MODE.equalsIgnoreCase(mode)

                      || "default".equalsIgnoreCase(mode)) {

                  this.mode=MOST_WORDS_MODE;

             } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {

                  this.mode=MAX_WORD_LENGTH_MODE;

             }

             else {

                  throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);

             }

        }

    @Override

    public void init(Map<String, String> args) {

        super.init(args);

        setMode(args.get("mode"));

    }

    public TokenStream create(Reader input) {

        return new PaodingTokenizer(input, PaodingMaker.make(),

                  createTokenCollector());

    }

    private TokenCollector createTokenCollector() {

        if( MOST_WORDS_MODE.equals(mode))

             return new MostWordsTokenCollector();

        if( MAX_WORD_LENGTH_MODE.equals(mode))

             return new MaxWordLengthTokenCollector();

        throw new Error("never happened");

    }

}

在schema.xml的字段text配置里加入该分词器。


<fieldtype name="text" class="solr.TextField" positionIncrementGap="100">

            <analyzer type="index">

                <tokenizer class="com.ronghao.fulltextsearch.analyzer.ChineseTokenizerFactory" mode="most-words"/>


                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/>

                <filter class="solr.LowerCaseFilterFactory"/>


                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

            </analyzer>

            <analyzer type="query">

                <tokenizer class="com.ronghao.fulltextsearch.analyzer.ChineseTokenizerFactory" mode="most-words"/>              

                <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>

                <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>

                <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/>

                <filter class="solr.LowerCaseFilterFactory"/>

                <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>

            </analyzer>

        </fieldtype>

</types>

    完成后重启tomcat,即可在http://localhost:8080/solr/admin/analysis.jsp

体验到庖丁的中文分词。注意要将paoding-analysis.jar复制到solr的lib下,注意修改jar包里字典的home。

四、 与自己应用进行集成

Solr安装完毕,现在可以将自己的应用与solr集成。其实过程非常的简单,应用增加数据-->根据配置的字段构建add的xml文档-->post至solr/update。

应用删除数据à根据配置的索引文档唯一标识符构建delete的xml文档-->post至solr/update。

检索数据à构建查询xml—>get至/solr/select/-->对solr返回的xml进行处理-->页面展现。

具体的xml格式可以在solr网站找到。另外就是solr支持高亮显示,非常方便。

关于中文,solr内核支持UTF-8编码,所以在tomcat里的server.xml需要进行配置

<Connector port="8080" maxHttpHeaderSize="8192" URIEncoding="UTF-8" …/>
另外,向solr Post请求的时候需要转为utf-8编码。对solr 返回的查询结果也需要进行一次utf-8的转码。检索数据时对查询的关键字也需要转码,然后用“+”连接。


String[] array = StringUtils.split(query, null, 0);

        for (String str : array) {

            result = result + URLEncoder.encode(str, "UTF-8") + "+";

        }


分享到:
评论

相关推荐

    solr.war包solr.war包solr.war包solr.war包solr.war包

    solr.warsolr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包solr.war包...

    已编译版本solr-8.11.2.tgz

    Solr 8.11.2是8.x系列的最后一个版本,新版本已经是9.0版本了。 1,什么是solr? Solr是一个独立的企业级搜索应用服务器,他对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务提供一定格式...

    solr服务器_solr_

    solr

    ik-analyzer-solr-6.x.jar

    solr更新到6.x的版本了,ik-analyzer-5.x.jar又不好使了。 无意间从"随-忆"的博客中看到了如何去修改源代码,从而让分词器能够适应6.x的版本,亲自尝试了一下,果然可以,于是奉上了自己重新编译的jar包。 6.x的版本...

    Linux上Solr的启动方式

    使用Solr内置的Jetty服务器启动Solr (1)借助X Shell上传solr的安装包到/usr/local/目录下,使用 tar -zxvf命令进行解压.  (2)使用内置的Jetty来启动Solr服务器只需要在example目录下,执行start.jar程序即可,...

    solr5.4.0完整包

    Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的...

    java进阶Solr从基础到实战

    在本套课程中,我们将全面的讲解Solr,从Solr基础到Solr高级,再到项目实战,基本上涵盖了Solr中所有的知识点。 主讲内容 章节一:Solr基础(上) 1. 环境搭建 2. 核心讲解 3. 数据导入 4. 各种中文分析器 章节二:...

    Solr in action.mobi

    PART 1 MEET SOLR. .................................................................1 1 ■ Introduction to Solr 3 2 ■ Getting to know Solr 26 3 ■ Key Solr concepts 48 4 ■ Configuring Solr 82 5 ■ ...

    Scaling Big Data with Hadoop and Solr

    Technologies like Hadoop are trying to address some of the concerns, while Solr provides high-speed faceted search. Bringing these two technologies together is helping organizations resolve the ...

    [Solr] Solr 管理教程 (英文版)

    [Packt Publishing] Solr 管理教程 (英文版) [Packt Publishing] Administrating Solr (E-Book) ☆ 图书概要:☆ Master the use of Drupal and associated scripts to administrate, monitor, and optimize Solr...

    solr增量更新架包apache-solr-dataimportscheduler.jar

    solr增量更新-

    SOLR的应用教程

    1.2 Solr的特性 4 1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码...

    solr基础知识介绍

    3. solr是什么 2 3.1 solr的功能 3 3.2 solr术语 3 3.2.1 Auto-warming 3 3.2.2 Facet 3 3.3.3 Document 6 3.3.4 Field 6 3.3.5 IndexWriter 6 3.3.6 IndexSearcher 6 3.3.7 Directory 6 3.3.8 Segment 7 3.3.9 ...

    Solr 搜索引擎 asp.net实现 示例详细操作步骤

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http G Solr et操作提出查找请求,并得到XML...

    全文检索solr7.5.0

    Solr 是Apache下的一个顶级开源项目,采用Java开发,基于Lucene的全文搜索服务器。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。这里谈到了Lucene,它是一个开放源代码的全文检索引擎工具包。提供了完整的...

    solr4.7服务搭建

    如何使用solr搭建服务器

    支持solr5.5 solr6.0中IK分词需要的资料

    支持solr5.5 solr6.0中IK分词需要的资料

    solr/ext/ 里面的jar包

    org.apache.solr.common.SolrException: Could not find necessary SLF4j logging jars. If using Jetty, the SLF4j logging jars need to go in the jetty lib/ext directory. For other containers, the ...

    solr-dataimport-scheduler.jar 可使用于solr7.x版本

    solr定时索引使用到的定时调度器jar包, 可使用于solr7.x版本

Global site tag (gtag.js) - Google Analytics