`
linshow26
  • 浏览: 89698 次
文章分类
社区版块
存档分类
最新评论

Solr的配置及从数据库建立索引

 
阅读更多
要建立自己的全文检索,一般都需要从数据库导入数据,在原来配置的基础上,增加导入的功能
1、D:\apache-tomcat-7.0.27\solr\conf\solrconfig.xml中增加
Xml代码  收藏代码
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> 
    <lst name="defaults"> 
          <str name="config">data-config.xml</str> 
    </lst> 
</requestHandler> 

2、增加D:\apache-tomcat-7.0.27\solr\conf\data-config.xml,内容为数据库的连接信息
Xml代码  收藏代码
  <?xml version="1.0" encoding="UTF-8"?> 
<dataConfig> 
<dataSource type="JdbcDataSource" driver="oracle.jdbc.driver.OracleDriver" 
    url="jdbc:oracle:thin:@10.74.8.206:1521:orcl" 
    user="uname" 
    password="pwd"/> 
 
<document name="zpxx">          
    <entity name="zpxx" query="select * from vw_zp_fullindex" transformer="ClobTransformer">                   
                <field column="GANG_WEI_BH"      name="GANG_WEI_BH"      /> 
                <field column="GANG_WEI_MC"      name="GANG_WEI_MC"      /> 
                <field column="GANG_WEI_MS"      name="GANG_WEI_MS"       clob="true"/> 
                <field column="GONG_ZU_DD_ZW"    name="GONG_ZU_DD_ZW"    /> 
                <field column="QI_TA"            name="QI_TA"            /> 
                <field column="YUE_XIN"          name="YUE_XIN"          /> 
                <field column="ZHI_CHENG"        name="ZHI_CHENG"        /> 
                <field column="GANGWEILB"        name="GANGWEILB"        /> 
                <field column="COMPID"           name="COMPID"           /> 
                <field column="DAN_WEI_MC"       name="DAN_WEI_MC"       /> 
                <field column="DANWEIXZ"     name="DANWEIXZ"         /> 
                <field column="JING_YING_FW" name="JING_YING_FW"     /> 
                <field column="DAN_WEI_JJ"       name="DAN_WEI_JJ"        clob="true"/> 
                <field column="DAN_WEI_DZ"       name="DAN_WEI_DZ"       /> 
                <field column="HANGYELB"     name="HANGYELB"         /> 
    </entity> 
</document> 
</dataConfig> 

因为有Clob字段,所以需要加上ClobTransformer
3、D:\apache-tomcat-7.0.27\solr\conf\schema.xml文件中增加
Xml代码  收藏代码
<!--自定义Field开始 --> 
            <field name="GANG_WEI_BH"        type="string" indexed="true" stored="true" required="true"/> 
            <field name="GANG_WEI_MC"        type="text" indexed="true" stored="true" /> 
            <field name="GANG_WEI_MS"        type="text" indexed="true" stored="true" /> 
            <field name="GONG_ZU_DD_ZW"      type="text" indexed="true" stored="true" /> 
            <field name="QI_TA"              type="text" indexed="true" stored="true" /> 
            <field name="YUE_XIN"            type="text" indexed="true" stored="true" /> 
            <field name="ZHI_CHENG"          type="text" indexed="true" stored="true" /> 
            <field name="GANGWEILB"          type="text" indexed="true" stored="true" /> 
            <field name="COMPID"         type="string" indexed="true" stored="true" /> 
            <field name="DAN_WEI_MC"     type="text" indexed="true" stored="true" /> 
            <field name="DANWEIXZ"           type="text" indexed="true" stored="true" /> 
            <field name="JING_YING_FW"       type="text" indexed="true" stored="true" /> 
            <field name="DAN_WEI_JJ"     type="text" indexed="true" stored="true" /> 
            <field name="DAN_WEI_DZ"     type="text" indexed="true" stored="true" /> 
            <field name="HANGYELB"           type="text" indexed="true" stored="true" />   
<!--自定义Field结束 --> 
 
  <copyField source="DAN_WEI_JJ" dest="text"/><!--clob字段 --> 
  <copyField source="GANG_WEI_MS" dest="text"/> 

把原有文件中id字段的required="true"去掉,否则导入的时候,会验证id字段,其实自己在做的时候,如果其他字段没有的话,可以删除
3、还要把oracle的jdbc驱动放到D:\apache-tomcat-7.0.27\webapps\solr\WEB-INF\lib
4、http://localhost:8080/solr/dataimport?command=full-import即可以进行导入数据
5、查询则通过http://localhost:8080/solr/admin/进行查询,输入查询字符串(Query String)"DAN_WEI_JJ:计算机"即可以查看全文检索结果








#apt-get install mysql-server-5.0

#apt-get install mysql

2.添加Handler
    编辑/opt/solr-tomcat/solr/conf文件夹下的solrconfig.xml文件,在config元素中添加

[xhtml] view plaincopy
< requestHandler   name = "/dataimport"   class = "org.apache.solr.handler.dataimport.DataImportHandler" >    
< lst   name = "defaults" >    
< str   name = "config" > data-config.xml </ str >    
</ lst >    
</ requestHandler >    

3.  在此文件夹中新建一个data-config.xml文件,内容如下

[xhtml] view plaincopy
<dataConfig> 
  <dataSource type="JdbcDataSource"  
              driver="com.mysql.jdbc.Driver" 
              url="jdbc:mysql://127.0.0.1:3306/db_expert"  
              user="root"  
              password="root"/> 
  <document> 
    <entity name="expert"  
            query="select id,experName,researchfield,title,workunit,postaladdress,officephone,email,biography from expertinfo"> 
    </entity> 
  </document> 
</dataConfig> 

4.  修改schema.xml,找到<fieldType name="text",将分词器修改为中文分词器,这里用的是包装过的Paoding分词,这个东西好像已经不更新了,以后看看IKAnalyzer吧。

[xhtml] view plaincopy
<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
        <tokenizer class="net.paoding.analysis.analyzer.ChineseTokenizerFactory" mode="most-words"/> 
        <!-- in this example, we will only use synonyms at query time 
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
        --> 
        <!-- Case insensitive stop word removal. 
          add enablePositionIncrements=true in both the index and query 
          analyzers to leave a 'gap' for more accurate phrase queries. 
        --> 
         <filter class="solr.StopFilterFactory" 
                ignoreCase="true" 
                words="stopwords.txt" 
                enablePositionIncrements="true" 
                /> 
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
         <filter class="solr.LowerCaseFilterFactory"/>     
         <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>     
     </analyzer>     
     <analyzer type="query">     
         <tokenizer class="net.paoding.analysis.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" 
                enablePositionIncrements="true" 
                /> 
         <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
         <filter class="solr.LowerCaseFilterFactory"/>     
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>   
         <filter class="solr.SnowballPorterFilterFactory" language="English" protected="protwords.txt"/> 
      </analyzer> 
    </fieldType> 

原来的schema.xml中没有的字段自己添加上。schema.xml默认是UTF-8编码。首先在<fields></fields>里添加要索引的域。

注意:数据库的表的主键的名字最好是id,以后才好办。

[xhtml] view plaincopy
<field name="id" type="int" indexed="true" stored="true" required="true" />  
<field name="experName"  type="text" indexed="true" stored="true"/> 
   <field name="researchfield"  type="text" indexed="true" stored="true"/> 
   <field name="title"  type="text" indexed="true" stored="true"/> 
   <field name="workunit"  type="text" indexed="true" stored="true"/> 
   <field name="postaladdress"  type="text" indexed="true" stored="true"/> 
   <field name="officephone"  type="text" indexed="true" stored="true"/> 
   <field name="email"  type="text" indexed="true" stored="true"/> 
   <field name="biography"  type="text" indexed="true" stored="true"/> 

然后在<solrQueryParser defaultOperator="OR"/>下面添加下面行。

[xhtml] view plaincopy
<copyField source="experName" dest="text" /> 
  <copyField source="researchfield" dest="text" /> 
  <copyField source="title" dest="text" /> 
  <copyField source="workunit" dest="text" /> 
  <copyField source="postaladdress" dest="text" /> 
  <copyField source="officephone" dest="text" /> 
  <copyField source="email" dest="text" /> 
  <copyField source="biography" dest="text" /> 

5.  包装Paoding的分词器

[java] view plaincopy
   1. package  net.paoding.analysis.analyzer;   
   2.    
   3. import  java.io.Reader;   
   4. import  java.util.Map;   
   5.    
   6. import  net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;   
   7. import  net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;   
   8. import  net.paoding.analysis.knife.PaodingMaker;   
   9.    
  10. import  org.apache.lucene.analysis.Tokenizer;   
  11. import  org.apache.solr.analysis.BaseTokenizerFactory;   
  12.    
  13. /**  
  14.  * Created by IntelliJ IDEA.   
  15.  * User: ronghao   
  16.  * Date: 2007-11-3   
  17.  * Time: 14:40:59 中文切词 对庖丁切词的封装  
  18.  */    
  19. public   class  ChineseTokenizerFactory  extends  BaseTokenizerFactory {   
  20.     /**  
  21.      * 最多切分 默认模式  
  22.      */    
  23.     public   static   final  String MOST_WORDS_MODE =  "most-words" ;   
  24.     /**  
  25.      * 按最大切分  
  26.      */    
  27.     public   static   final  String MAX_WORD_LENGTH_MODE =  "max-word-length" ;   
  28.    
  29.     private  String mode =  null ;   
  30.    
  31.     public   void  setMode(String mode) {   
  32.         if  (mode ==  null  || MOST_WORDS_MODE.equalsIgnoreCase(mode) ||  "default" .equalsIgnoreCase(mode)) {   
  33.             this .mode = MOST_WORDS_MODE;   
  34.         } else   if  (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {   
  35.             this .mode = MAX_WORD_LENGTH_MODE;   
  36.         } else  {   
  37.             throw   new  IllegalArgumentException( "不合法的分析器Mode参数设置:"  + mode);   
  38.         }   
  39.     }   
  40.    
  41.     @Override    
  42.     public   void  init(Map<String, String> args) {   
  43.         super .init(args);   
  44.         setMode(args.get("mode" ));   
  45.     }   
  46.    
  47.     public  Tokenizer create(Reader input) {   
  48.         return   new  PaodingTokenizer2(input, PaodingMaker.make(), createTokenCollector());   
  49.     }   
  50.    
  51.     private  TokenCollector createTokenCollector() {   
  52.         if  (MOST_WORDS_MODE.equals(mode))   
  53.             return   new  MostWordsTokenCollector();   
  54.         if  (MAX_WORD_LENGTH_MODE.equals(mode))   
  55.             return   new  MaxWordLengthTokenCollector();   
  56.         throw   new  Error( "never happened" );   
  57.     }   
  58. }   
Java代码  收藏代码 
   1. package net.paoding.analysis.analyzer;   
   2.    
   3. import java.io.Reader;   
   4. import java.util.Map;   
   5.    
   6. import net.paoding.analysis.analyzer.impl.MaxWordLengthTokenCollector;   
   7. import net.paoding.analysis.analyzer.impl.MostWordsTokenCollector;   
   8. import net.paoding.analysis.knife.PaodingMaker;   
   9.    
  10. import org.apache.lucene.analysis.Tokenizer;   
  11. import org.apache.solr.analysis.BaseTokenizerFactory;   
  12.    
  13. /** 
  14.  * Created by IntelliJ IDEA.  
  15.  * User: ronghao  
  16.  * Date: 2007-11-3  
  17.  * Time: 14:40:59 中文切词 对庖丁切词的封装 
  18.  */   
  19. public class ChineseTokenizerFactory extends BaseTokenizerFactory {   
  20.     /** 
  21.      * 最多切分 默认模式 
  22.      */   
  23.     public static final String MOST_WORDS_MODE = "most-words";   
  24.     /** 
  25.      * 按最大切分 
  26.      */   
  27.     public static final String MAX_WORD_LENGTH_MODE = "max-word-length";   
  28.    
  29.     private String mode = null;   
  30.    
  31.     public void setMode(String mode) {   
  32.         if (mode == null || MOST_WORDS_MODE.equalsIgnoreCase(mode) || "default".equalsIgnoreCase(mode)) {   
  33.             this.mode = MOST_WORDS_MODE;   
  34.         } else if (MAX_WORD_LENGTH_MODE.equalsIgnoreCase(mode)) {   
  35.             this.mode = MAX_WORD_LENGTH_MODE;   
  36.         } else {   
  37.             throw new IllegalArgumentException("不合法的分析器Mode参数设置:" + mode);   
  38.         }   
  39.     }   
  40.    
  41.     @Override   
  42.     public void init(Map<String, String> args) {   
  43.         super.init(args);   
  44.         setMode(args.get("mode"));   
  45.     }   
  46.    
  47.     public Tokenizer create(Reader input) {   
  48.         return new PaodingTokenizer(input, PaodingMaker.make(), this.createTokenCollector());   
  49.     }   
  50.    
  51.     private TokenCollector createTokenCollector() {   
  52.         if (MOST_WORDS_MODE.equals(mode))   
  53.             return new MostWordsTokenCollector();   
  54.         if (MAX_WORD_LENGTH_MODE.equals(mode))   
  55.             return new MaxWordLengthTokenCollector();   
  56.         throw new Error("never happened");   
  57.     }   
  58. }   



这两个修改的类就放在/opt/tomcat/webapps/solr中,在压缩包的WEB-INF文件夹中新建classes文件夹,将这两个类连同包层次复制进去就行。

6.设置PAODING_DIC_HOME的环境变量,指向Paoding词典文件的位置。(比如/opt/dic)

#vim /etc/profile

添加下面的环境变量

JAVA_HOME=/usr/lib/jvm/java-6-openjdk
CLASSPATH=.:/usr/lib/jvm/java-6-openjdk/lib
ANT_HOME=/usr/share/ant
PATH="$JAVA_HOME/lib:$ANT_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
PAODING_DIC_HOME=/opt/dic
export JAVA_HOME
export CLASSPATH
export ANT_HOME
export PATH
export PAODING_DIC_HOME

7. 将Paoding和数据库驱动放到/opt/tomcat/webapps/solr/WEB-INF/lib中。

进入浏览器,运行
    http://localhost:8983/solr/dataimport?command=full-import
    导入成功后,运行
    http://localhost:8983/solr/admin/
    在搜索框中输入搜索内容进行查询

现在就完成了数据库的索引了。



分享到:
评论

相关推荐

    solr同步数据库需要jar包

    1. **数据库连接**:使用JDBC(Java Database Connectivity)驱动,通过配置数据库连接参数(如URL、用户名、密码),建立Solr与数据库的连接。 2. **数据变更检测**:可以使用数据库的触发器或者日志分析,如MySQL...

    跟益达学Solr5之从MySQL数据库导入数据并索引

    《跟益达学Solr5之从MySQL数据库导入数据并索引》这篇文章主要探讨了如何使用Apache Solr 5从MySQL数据库中导入数据并建立索引,以便进行高效的全文搜索。Solr是一款强大的开源搜索服务器,它提供了丰富的查询语言、...

    solr5.3.2配置文档

    ### Solr 5.3.2配置文档 #### 一、安装Solr 5.3.2 在本文档中,我们将详细介绍如何安装并配置Solr 5.3.2,包括基本的安装步骤以及如何配置...完成以上步骤后,Solr即可与MySQL数据库建立连接,并从指定表中导入数据。

    跟益达学Solr5之增量索引MySQL数据库表数据

    在这个主题“跟益达学Solr5之增量索引MySQL数据库表数据”中,我们将深入探讨如何利用Solr 5来实现对MySQL数据库表数据的增量索引,以便在搜索时获得实时更新的结果。 首先,我们需要理解什么是增量索引。在传统的...

    solr4.7从数据库导数据[归类].pdf

    Solr 4.7 是一个流行的全文搜索引擎,它允许用户通过数据导入处理器(DataImportHandler, DIH)从关系型数据库如 SQL Server 导入数据并建立索引,以实现快速搜索。在这个教程中,我们将深入理解如何在 Solr 4.7 中...

    基于solr的网站索引架构(一)

    Solr是一个开源、高性能的全文检索服务,它允许开发者为大量数据建立索引,从而实现快速的搜索功能。在"基于solr的网站索引架构(一)"中,我们将主要关注以下几个方面: 1. **Solr简介**: Solr是由Apache Lucene...

    solr京东案例包括项目资料和数据库

    2. **索引构建**:京东案例可能会展示如何将大量的商品数据、用户评价、订单信息等导入到Solr中,建立索引的过程。这涉及数据源的连接、数据转换(如JSON、XML格式)以及使用Solr的DataImportHandler(DIH)或其他...

    Solr数据库连接[SQL,Oracle]

    在Solr中,有时我们需要与传统的关系型数据库如SQL Server或Oracle进行交互,以获取数据或者同步数据库中的信息到Solr索引中。本文将详细介绍如何在Solr中建立与SQL Server和Oracle的连接,并解决可能出现的连接问题...

    Solr技术分析及运用

    - DIH允许Solr从关系型数据库或其他数据源导入数据,建立索引。 - 在`solrconfig.xml`中配置数据源、查询语句和映射规则,以便Solr能读取和索引数据库中的数据。 通过上述步骤,可以建立一个基本的Solr环境,并...

    Solr3.6用DIH组件进行MySQL数据库全文索引[参照].pdf

    在Solr中,DataImportHandler(DIH)组件是一个强大的工具,用于从各种外部数据源,如关系型数据库(如MySQL)中导入数据并建立全文索引。在本例中,我们将探讨如何使用Solr 3.6版本的DIH组件来对MySQL数据库中的...

    Solr生产环境总结

    Solr 是 Apache 开源项目中的一个全文搜索服务器,基于 Java 开发,并且是建立在 Lucene 全文检索引擎库之上。它不仅提供了更高级的查询语言,还实现了可配置、可扩展的特性,对索引和搜索性能进行了优化。在生产...

    我的配置成功的solr8+tomcat.zip

    这可以通过使用Solr的DataImportHandler(DIH)实现,DIH能够定期或实时地从数据库拉取数据并更新到Solr索引中。配置包括在solrconfig.xml中启用DIH,设置数据源和映射规则,以及可能的触发更新策略。 4. **IK中文...

    使用lucenesolr搭建Oracle数据库全文搜索服务.docx

    - 上述配置指定了从Oracle数据库中的`Address`表导入`name`、`x`、`y`三个字段。 3. **执行数据导入**: - 使用Solr的Data Import Handler(DIH)来执行数据导入任务。这可以通过Solr的管理界面或命令行工具完成。...

    solr课件还有安装原件

    在使用Solr时,通常需要一个后端数据库来存储原始数据,Solr通过数据导入工具(Data Import Handler, DIH)从这些数据库中提取数据并建立索引。这个SQL脚本可能用于初始化一个电子商务平台的商品数据库,这些商品...

    solr-8.5.2.zip

    这通常通过 DataImportHandler (DIH) 实现,它能够定期从关系数据库抽取数据并建立索引。 3. **中文分词支持**:对于中文文本,分词是必不可少的步骤,因为中文词语之间没有明显的分隔符。本配置集成了多个中文分词...

    Solr全文索引

    - **全文检索**:Solr能够对文本进行分词,建立倒排索引,从而快速定位到包含特定关键词的文档。 - **分布式搜索**:通过Sharding和Replication,Solr可以分布在网络中的多台机器上,处理大规模数据并提高查询性能...

    solr入门教程

    一旦配置完成,Solr会根据`data-config.xml`和`delta-data-config.xml`的设置,自动从数据库中抓取数据并建立索引。这样,当数据库中的数据发生变化时,Solr可以通过增量索引实时或定期更新索引,保持与数据库的一致...

    solr开发指南.pdf

    - **建立索引**: Solr能够自动为接收到的数据建立索引,以便于后续的快速检索。 - **数据检索**: Solr支持全文搜索、高亮显示、精确匹配等多种检索方式,能够满足复杂多变的搜索需求。 #### 三、Solr的依赖环境 ...

    使用MySQL作为SOLR的索引源

    在SOLR中,这通常通过DataImportHandler (DIH) 实现,这是一个内建的数据导入工具,允许从外部数据源如MySQL获取数据并建立索引。配置过程包括以下几个步骤: 1. **配置SOLR核心**:在SOLR的`solrconfig.xml`配置...

Global site tag (gtag.js) - Google Analytics