solr 插入数据后变数组_Solr初步使用心得(rails4项目)

首先Solr是什么,简单来说就是一个单独的搜索项目,能够加快搜索速度的api项目,存的数据由本地数据库的数据经过项目做一定处理保存上去,然后搜索通过http传参的模式,返回所需数据类型的结果(json,xml等),下面是百度百科解释:

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

本来直接装的sunspot_solr的gem包,但是后来不知道为什么连接不上,就换成外部的直接跑的Tomcat+solr服务的模式了,具体服务配置和安装就不多说了,说一下使用吧

1.建立索引:在model里面设定好需要搜索的字段名和类型,需要注意的是每次只能搜索一个模型,索引也是一条记录一条记录的建立的,不能进行像数据库里的链接查询,所以在建立索引的时候需要给join数据配置进去,例如

searchable do

text :title

text :content do

#html标签处理

Sanitize.fragment(self.content)

end

#从关联的province处找到区域的id

integer :region_id do

province.region_id

end

integer :province_id

integer :city_id

integer :town_id

#关联用途分类的id,:multiple就是数组的意思,例如某条数据的usage_category_ids是[1,2,3]

#而搜索条件给的是[3,4,5],那么这条记录就会被检索出来

integer :usage_category_ids, :multiple => true do

usage_categories.map(&:id)

end

time :published_at

end

在after_save里加上self.index!保证每次保存结束都可以更新索引。而对于当前已有数据可以用

#参数意思:缓冲大小,模型名,不知道..

rake sunspot:reindex[batch_size,modes,silence]

rake sunspot:reindex[1000,Info]

2.搜索:

# 和Info.select(_select).includes(_includes)一样

search = Info.solr_search(select: _select ,include: _includes) do

#全文搜索:指定搜索区域title,content

fulltext params[:kw],fields:[:title,:content]

#any do 包围起来的相当于 and (region_id=? or province_id=? or city_id not in(1,2,3))

any do

with :region_id ,subscription["region"] unless subscription["region"].blank?

with :province_id ,subscription["province"] unless subscription["province"].blank?

without :stage_id , [1,2,3]

end

# published_at>=? published_at <=?

#对应大于和小于是:greater_than 和less_than

with(:published_at).greater_than_or_equal_to p[:published_at_gteq]

with(:published_at).less_than_or_equal_to p[:published_at_lteq]

#分页数据,可适用于自带的分页方法

paginate page: p[:page]||1, per_page: p[:per_page]||20

#排序

order_by 'published_at' ,:desc

end

@infos = search.results

log中sql为:SELECT id, title, province_id, city_id, town_id, content FROM infos WHERE infos.id IN (5, 111, 11, 8, 10, 7, 9, 12, 6, 14, 17, 20, 13, 16, 19, 15, 18, 21, 23, 26)

也就是说solr其实是根据搜索条件返回一堆id回来,最终的select和join都是后再执行默认数据库的一次查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值