美文网首页
Solr初步使用心得(rails4项目)

Solr初步使用心得(rails4项目)

作者: 夏_至 | 来源:发表于2015-07-27 10:14 被阅读627次

首先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都是后再执行默认数据库的一次查询

http://www.solr.cc/blog/
http://lucene.apache.org/solr

相关文章

  • Solr初步使用心得(rails4项目)

    首先Solr是什么,简单来说就是一个单独的搜索项目,能够加快搜索速度的api项目,存的数据由本地数据库的数据经过项...

  • springboot2.0 运行solr

    Solr项目简介 Solr Spring Boot的学习项目 maven依赖 jdbc配置 Solr reposi...

  • Solr初识

    1 什么是Solr Solr是Apache的顶级开源项目,它是使用Java开发的,基于lucene的全文搜索服务器...

  • solr初步学习

    前段时间自己简单的学习了一下Elasticsearch,但是我们目前开发项目中其实使用的还是solr,自己之前虽然...

  • 项目使用初步总结

    ui-sref的简单使用 具体用法: 男人 这是一个非常简单的ui-sref的使用,当JavaScript重新生成...

  • Kotlin使用关键字解释、基本规范分享

    经过初步的学习,在项目中使用了一段时间kotlin后,汇总小组各个成员的心得体会,在此做个记录。 operator...

  • Ranger-Solr审计日志安装

    使用RangerAdmin安装solr,基于已有的solr环境安装,主要是在solr创建用于存储数据的CoreAd...

  • solr内存调优

    在使用使用solr时,当我们的数据量比较大时,我们就要考虑对solr内存进行调优了,不然solr程序就会通过oom...

  • solr6.5.1(2)定时增量更新

    近期电商项目需要用到solr服务,之前对solr了解不多,最近主要做了安装solr,刚开始用docker安装,后续...

  • 使用solrj连接solr集群进行操作

    1.solr配置文件 2.solr配置 3.solr查询接口--做两个接口 3.使用solr查询数据 4.封装so...

网友评论

      本文标题:Solr初步使用心得(rails4项目)

      本文链接:https://www.haomeiwen.com/subject/bqqmqttx.html