solr 简单搭建 数据库数据同步(待续)

原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦)。所以就稍微接触和研究了下文档检索。

文档检索其实是全文检索,是通过一种技术把N多文档进行一定规律的切割归类,然后创建易于搜索的索引式文件,然后搜索具有某些规律的文档时,能够通过快速定位索引,然后根据索引提供的信息精确定位到文档从而实现迅速找到文档。这个文档一般成为条目。

上家公司的时候使用的是Lucene加上Zoie实现的。lucene是apache下的开源项目,不过并不是全文检索的实现,而是一个全文检索的引擎,是一个架构,是其他检索服务的底层支持。zoie研究的不是太多,因为觉得并不是很好用。对于lucene的基本知识和使用,以后单独写篇博客记录,该文主要记录solr的简单搭建和应用

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr 提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。也就是说solr可以自己直接做服务使用。就像上家公司自己开发的搜索服务包,封装了一些lucene的操作(主要是写入索引indexWriter)和一些zoie的操作(主要是读取操作indexReader),使用了最简单的自带的分词方法StandardAnalyzer,所以并不好用。而solr就是一个已经都封装好的war包,准许http访问,至于文档格式、字段、索引创建、搜索等都是可以配置的。是不是可以说基本perfect了!

下来就简单说下我的研究步骤:

1.下载solr。我的笔记本是Windows系统,所以我下载的是zip包,下载地址

2.解压solr的zip包,解压的目录结构如图:

bin目录下是一些脚本

contrib是一些扩展插件的jar包,供solr服务引用和添加高级功能等。其中配置的分词器、数据库数据引入、数据视图解析(xml、json等)等。

dist下是solr自己的一堆jar包以及java客户端sorlj的依赖包

docs下是帮助文档,十分详细

example下是实例配置、jetty的配置、solr core配置

licenses下是认证信息,无需管。


3.这次直接讲解如何将数据库的数据同步到索引里。

01.将example/solr中的collection1文件夹复制一份到同目录下,重命名为user,将user文件夹下的core.properties和README.txt删掉,将user/data文件夹下清空。
02.user文件夹即是我们新建的索引库。其下的conf文件夹是索引的一些配置文件,data文件夹下是初始化之后创建的索引文件
03.conf下介绍:
.clustering文件夹配置集群的(暂未研究)
.lang文件夹配置的各国语言的stopwords
.velocity文件夹是配置vm的返回格式,使用/browse即可
.xlst文件夹是配置xml数据格式的
外部文件解析:
stopwords.txt过滤词
protwords.txt有保护性的词(不太理解)
synonyms.txt同义词
spellings.txt拼写检查文档
elevate.xml配置排名上升的field
solrconfig.xml是solr的主要配置文件,配置jar包、路径信息、创建索引配置、updateHandler配置、query配置、requestHandler配置、一些展示页面配置、数据源配置(DataImportHandler)、facet展示页面配置
schema.xml是solr索引的字段配置文件。配置field、fieldType等
04.修改solrconfig.xml文件:
引入自己需要的jar包
<lib dir="../bin/" regex="mysql-connector-java-5.0.8-bin.jar" />
  <!-- analysis libs by tianzhilong -->
  <lib dir="../../../contrib/analysis-extras/lib" regex=".*\.jar" />


配置/browse访问的查询条件、VelocityResponseWriter、facet展示页面。主要需要修改Query settings中的qf(设置查询字段以及各字段的权重);df(默认查询字段)等等查询参数可见http://sarsgetaway.iteye.com/blog/1560143;faceting设置主要设置field、query、range;高亮设置;拼写检查设置


加入/dataimport路径进行数据同步
<!-- DataImportHandler to be registered in the solrconfig.xml -->
  <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
      <str name="config">data-config.xml</str>
    </lst>
  </requestHandler>
05.修改schema.xml文件
将数据库user表的需要存储和索引的字段配置进schema.xml中,将原来的测试字段删除;
dynamicField不变;
copyField将自己的字段添加(建立索引的字段,只存储不索引的字段不管);
fieldType中增加中文分词的类型
 <fieldType name="text_smartcn" class="solr.TextField" positionIncrementGap="0">
      <analyzer type="index">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="org.apache.lucene.analysis.cn.smart.SmartChineseSentenceTokenizerFactory"/>
        <filter class="org.apache.lucene.analysis.cn.smart.SmartChineseWordTokenFilterFactory"/>
      </analyzer>
    </fieldType>
06.在velocity文件夹下,修改product_doc.vm文件。将自己需要显示的字段设置上


    时间有限,下来再排版和补全。待续~

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。