设为首页 收藏本站
查看: 715|回复: 0

[经验分享] 学习使用solr(一),solr和tomcat的配置及数据库中表的全量索引(下)

[复制链接]

尚未签到

发表于 2016-12-16 09:26:04 | 显示全部楼层 |阅读模式
  在tomcat中部署好了solr之后,接下来就要对数据库中的表建立索引了。
  首先回顾一下文件的结构:
  tomcat的$CATALINA_HOME是/usr/local/tomcat-solr-blog,solr的$SOLR_HOME是/usr/local/tomcat-solr-blog/solr。具体的情况可以去大体看一下上一篇文章:学习使用solr(一),solr和tomcat的配置及数据库中表的全量索引(上)。
  第二步,为数据库中的表建立全量索引。
  我此次建立的索引是针对一张表的,多张表的还没研究。
  首先说一下我所索引的数据表的结构和数据吧,为了简单起见,一张图就表示了它。由下图可见,我的数据表格里就有两列,一列int型的solr_id,一列varchar型的solr_text。数据是李白的《静夜思》。由于我只完成了全索引的建立,所以此处对数据没什么要求。
         DSC0000.png
  有了数据之后就开始对此表建立全索引了。
  1,先要修改solrconfig.xml文件,它存在于$SOLR_HOME/conf(此处的路径问题可以去上里查找,一般看到这篇文章的应该都知道在哪里可以找得到solrconfig.xml)。在其中增加如下配置:

<requestHandler name = "/dataimport" class = "org.apache.solr.handler.dataimport.DataImportHandler">     
<lst name = "defaults">  
<str name = "config">data-config.xml</str>
</lst>
</requestHandler>
  增加好了之后,先重启一下tomcat看看有什么问题。启动tomcat,查看日志发现报了一个错误:
  Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler'
  在加载DataImportHandler时出错了,这是因为没有往项目里面导入apache-solr-dataimporthandler-3.6.2.jar这个jar包。好了,这里我碰到了一个没有解决的问题。现在看solrconfig.xml这个文件当中的某段配置,如下:

  <lib dir="../../dist/" regex="apache-solr-cell-\d.*\.jar" />
<lib dir="../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../dist/" regex="apache-solr-clustering-\d.*\.jar" />
<lib dir="../../contrib/clustering/lib/" regex=".*\.jar" />
<lib dir="../../dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />
<lib dir="../../contrib/dataimporthandler/lib/" regex=".*\.jar" />
<lib dir="../../dist/" regex="apache-solr-langid-\d.*\.jar" />
<lib dir="../../contrib/langid/lib/" regex=".*\.jar" />
<lib dir="../../dist/" regex="apache-solr-velocity-\d.*\.jar" />
<lib dir="../../contrib/velocity/lib" regex=".*\.jar" />
  观察这段代码不难发现,它正密集的指出了一些jar包所在的位置,其中有这样一项,

<lib dir="../../dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />
  似乎为我指明了我的apache-solr-dataimporthandler-3.6.2.jar包应该放在哪里。于是我按照路径,在配置文件往上两级建立了dist文件夹,并将jar包放进去。再重启tomcat。发现没用……这里,促使我开始研究tomcat的原理了。
  其实这个问题很好解决,直接找到/usr/local/tomcat-solr-blog/webapps/solr-example/WEB-INF/lib,将jar包拖进去,再重启tomcat看看。报了一个新错误:Can't find resource 'data-config.xml'。接下来就来建立data-config.xml文件。
  2,在solrconfig.xml的同级目录下,新建data-config.xml,并且填入内容如下:      

<dataConfig>  
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://host/db_name"
user="root"
password="****"/>
<document>  
<entity name="solr_test"   
query="select solr_id,solr_text from solr_test">  
</entity>  
</document>  
</dataConfig>
  这个xml文件的各项都很好理解,显示配置了数据库的驱动,地址,用户名和密码。然后又对对哪个表建立索引进行了配置,先按照这个配置去写,这是最简单的全量配置的写法。
  新建完了之后要把数据库的驱动的jar包加到工程里面,我将mysql驱动的jar包也放到了/usr/local/tomcat-solr-blog/webapps/solr-example/WEB-INF/lib之下。然后再重启tomcat看看情况。启动成功,没有报错。但此时还没建立全量索引。只能说明连接数据库的部分没有出错。好吧,最后一步,配置schema.xml文件。
  3,改写schema.xml文件。首先找到schema.xml,它也跟solrconfig.xml是属于同级目录。打开来看一下,发现这个文件好长,有好多的配置项和注释啊。所以,我就简化了一下,把我不需要的全部删掉,最后删减玩的schema.xml是下面这个样子。

<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.5">
<types>
<fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
</types>
<fields>
<field name="solr_id" type="int" indexed="true" stored="true" />
<field name="solr_text"  type="string" indexed="true" stored="true"/>
</fields>
<uniqueKey>solr_id</uniqueKey>
</schema>
  我只选取了比较重要的几个节点,<types>定义了field的类型,在此我需要int和string,<fields>相当于是数据表里的字段,跟data-config.xml及数据库中的字段都是对应的,你要对哪些个字段建索引,就要写哪些个字段。最后是个主键。关于schema.xml的详细解释,可以去百度一下。修改完成后,再重启一下tomcat。报了一个错误,仔细看一下有两点很重要,Error initializing QueryElevationComponent.For input string: "MA147LL/A"。解释这个问题,就要先看一下solrconfig.xml这个文件中有如下配置:

<searchComponent name="elevator" class="solr.QueryElevationComponent" >
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent>
  此处用到了一个QueryElevationComponent,它需要一个配置文件elevate.xml,其内容如下:

<elevate>
<query text="foo bar">
<doc id="1" />
<doc id="2" />
<doc id="3" />
</query>
<query text="ipod">
<doc id="MA147LL/A" />  <!-- put the actual ipod at the top -->
<doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
</query>
</elevate>
  我们从中可以看到有一项id的值为MA147LL/A。关于这个问题,我做了一系列的尝试,最后试着解释它一下:由于QueryElevationComponent启动是要求必须有一个uniqueKey,我此处定义的uniqueKey是int类型的。而我们看elevate.xml时发现它有两个string类型的id值。所以此处就报错了。修改这个问题的两个方式,一是把你的schema.xml中的uniqueKey的值设置为一个string类型的值,二是直接在solrconfig.xml中直接注释掉这一段的配置,两者我都试过,都能成功。这里我采用的是后者。注释掉了之后再重启tomcat,又报了一个错:undefined field text。这个问题我百度了一下,也没找到根源。但知道了原因是有一个步骤要使用一个名字叫text的field,但是我们没有,这里不妨定义一下,在schema.xml文件的<fields>中加上如下一句:

<field name="text" type="string" stored="false" indexed="false"/>
  然后再重启下tomcat。没有报错了,好的,这说明配置过程已经可以了。下面就要建立索引了。访问如下的地址:http://localhost:8983/solr-example/admin/dataimport.jsp?handler=/dataimport,出现如下界面:点击页面左下方的full-import按钮,生成索引。具体变化我忘了,在运行完了之后看看tomcat的日志,发现《静夜思》被打出来了。
  
DSC0001.png
  回到http://localhost:8983/solr-example/admin/之后什么都不要做,保持查询框中的内容是*:*,直接点击search,看到打出来如下的内容,你就开心吧,全量索引建立完成。
  
DSC0002.png
 
  好了,在这个过程中,我有好多的问题都没找到最终的原因,之后还有添加中文分词,中文分词是干嘛的,增亮索引以及在项目中使用solr等一系列问题要解决。
  希望你学习solr的时候这两篇文章可以帮助到你。小菜鸟要努力学习,欢迎大神批评指正。
  
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314986-1-1.html 上篇帖子: solr是如何存储索引的 下篇帖子: solr 高亮的配置参数说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表