
最近搭建一个全文检索平台。最初考虑只采用lucene,然后自己写索引构建程序、检索框架等,类似osc @红薯 的方案,以前也做过比较熟悉。但有两个问题,1比较复杂,工作量和维护量都比较大。2 检索会有一定的延时。
看了看Solr决定采用solr,可以节省很大一部分开发时间。但有几个问题想请教下 osc 里的全文检索高手,希望大家不吝赐教:
1第一种方案,solr配置数据库,自动处理建索引。这样会不会延时很大,无法做到实时检索?
2第二种方案,通过solrj客户端在应用端 处理建索引问题,比如在发布一篇文章的时候,通过>
solr在对数据库表建增量索引时,目前是通过在数据库做一个标志位来区分是否已经建立索引,这样做有些影响效率,每次建索引还附带着更新字段,而且在索引删除时,需要更新字段后才能重新建索引,特麻烦!
这几天刚刚学了些lucene和solr,用lucene比较底层,所以打算用solr来实现如下类似功能:
1、比如查看某篇文章,旁边能展示跟这篇文章相似的文章、新闻之类的,用moreLikeThis来做。
2、站内搜索,输入一些关键字,能搜出文章、新闻等等信息。
现在假如我有一张文章表和一张新闻表,暂不考虑关联,solr默认建立索引,在solr_home有个conf文件夹,启动Tomcat,会自动建立一个同级别的data文件夹,是存放索引的。在conf文件夹下主要有2个配置文件,其中一个schemaxml,看起来就像一张表,而不能在里面放第二张表的字段信息,因为里面有一个主键,而我
这需要看配置,字段有两个配置属性:indexed、stored
indexed:缺省为true, 说明这个数据应被搜索和排序
stored: 缺省true,说明这个字段被包含在搜索结果中是合适的
因为要该字段要做检索,所以indexed肯定设置为true,因此“开心”分词后得到的“开”和“心”的索引一定会被存储
若stored为true,则该字段的原始值也会被存储;反之,则不会,导致在检索“开”或“心”时,会返回该索引项,但其字段内容“开心”则不会返回。
一、增量索引之删除
昨天已经说过,增量索引其实就是SOLR对上次做过(增量或者全量)索引之后到这次做索引之间的这段时间数据库发生变化的数据进行创建索引,昨天我们说了增加一条数据或者修改一条数据之后创建增量索引,现在来说删除数据的增量索引。
其实这里所说的删除是假删除,什么意思呢?就是并不是说在数据库中把某些数据给彻底删除掉,而是说给你不想创建索引的数据一个标识符,然后告诉
solr,有这个标识符的数据你就不要给我创建索引了,我不需要,然后solr创建索引的时候就会忽视这些有特殊标识符的数据,大概的原理就是这样的,那
么怎么实现的呢?下面来看:
11数据库新增字段
昨天做新增的增量索引的时候需要在数据库添加一个字段,今天做删除的,还是需要一个字段,然后用这个字段来标示数据是否需要创建索引,字段如下所示:
字段名称大家可以自己看着定,类型给个int就行,至于长度也随意,我的是0表示需要创建索引的数据,1表示不需要创建索引的数据,也就是我所说的假删除的数据。
12修改配置文件
同样,需要将该字段配置到data-configxml和schemaxml文件中,如下所示:
data-configxml
注意圈起来的三个地方,首先肯定是需要把isdelete字段变成一个file标签,其次,需要query语句需要添加上where条件,查询出数据库中所有的需要创建索引的数据,然后再添加一个deletedPKQuery语
句,这条语句和deltaQuery与deltaImportQuery语句一样,都是只有在做增量索引的时候起作用,deletedPKQuery是查
询出所有假删除的数据的ID,然后由deltaImportQuery查询出这些ID对应的记录的全部数据,然后在已经创建的索引中删除掉这一部分索引。
schemaxml
schemaxml文件中倒是没有什么大的变化,只需要把isdelete字段添加进来即可:
13查看效果
按照上面的配置即可,然后我们来看一下效果,首先是数据库:
还是昨天的17条数据。
SOLR已经创建好的索引:
索引也是17条,和数据库的数据是对应的,下面我把数据库中的其中两条数据的isdelet字段修改成1,然后创建一个增量索引,方法和昨天一样,我就不再截图了,首先还是修改数据库:
把发哥跟梁朝伟的isdelete修改成1,执行增量索引后的结果如下:
可以看到此时的索引少了2条,那到底少的是不是我变成1的两个人呢?我们可以查找一下,找不到的话就对了:
可以看到此时查找周润发,但是只找到了星爷,这个原因还是分词器的问题,昨天已经说过了,下面再查一下梁朝伟:
可以看到查找结果是空的。
通过上面的两条查询,说明我们对假删除所做的增量索引时成功的。
二、定时增量索引
如果每次数据库变化两条数据我们就得到>
以上就是关于关于Solr 谁可以告诉我这个问题怎么解决全部的内容,包括:关于Solr 谁可以告诉我这个问题怎么解决、solr3.5中如何用java代码为PDF,Office等文件添加索引、solr索引时分词,如果更新词库了怎么办等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)