Lucene和solr基础介绍

       solr是对lucene的封装:
                1.lucene能够完成的功能,使用solr能够用更简单更方便的方法完成一样的功能。
Like  :  顺序扫描法
        从文档头一直扫描到文档尾,直到找到为止,速度很慢。
全文检索技术(倒排索引):
        做用:
                1.能够帮咱们实现;相似于百度或者谷歌同样的搜索引擎
                2.能够帮咱们实现相似京东或淘宝同样的站内商品搜索功能
                3.能够帮咱们实现;相似贴吧或者论坛等一些站内搜索帖子的功能
                4.能够帮咱们实现相似智能客服的功能
                5.智能机器人
        原理(特色):
                1.在搜索以前,先对关键词进行分词
                2.索引库:文档集合、索引目录    
                        a:增长文档的时候先对文档进行分词
                        b:将分的词放入索引目录中,并记录该词在哪些文档中出现了多少次
                        c:根据关键词分的词到索引库中去惟一匹配速度很是快。
                3.相关度排序:
                        a:一个词在这个文档中出现的次数越多,排序越靠前。
                4.一个词在不少文档中都出现了,那么就会下降这个词的权重值。
 
数据查询的方法:
        顺序扫描法
        倒排索引
 
添加流程:
        1.采集数据,从数据库中获取。
        2.建立文档对象Document
        3.建立域来存储要带出来的值。使用对象 Field   (new  TextField),须要带出来的几个值,就建立几个域对象。
        4.将建立出来的域放入到文档对象中。
        5.建立一个文档对象的集合。将每一次装好的文档对象放入到集合中。
        6.建立IndexWriter对象,用来写入对象到索引库,须要的参数是:
                a: 索引库要存储的地方,一个磁盘目录对象(Directory,一个接口,使用子类对象FSDirectory,磁盘对象)。
                b: 一个能够写入索引配置的对象。IndexWriterConfig对象。参数是一个是版本信息(Version.?),参数二是一个分词器对象。
        7.建立Directory对象、IndexWriterConfig对象。由于IndexWriterConfig对象的参数须要一个分词器对象。因此...
        8.建立分词器对象。Analyzer,也是一个接口,子类:StandardAnalyzer();这个子类只对英文分词有效。因此国人写了一个对中文有效的分词器对象  IKAnalyzer对象。
        9.将拿到的全部的文档对象写入到索引库中,使用IndexWriter对象添加Document对象。
        10.提交、关流。IndexWriter是一个流对象
查询流程:
        1.建立语法解析器QueryParser对象
                参数一:从哪一个域值里面查
                参数二:分词器
        2.建立查询语法Query对象,使用语法解析器对象调用parse方法,执行查询语句,返回Query对象
        3.建立读索引的对象IndexReader,是一个接口,须要调用open方法来建立读索引的对象。
                参数是:建立磁盘对象,找到索引库的位置,调用的是open方法
        4.建立查询对象IndexSearcher.
        5.执行Query对象,使用search方法
                参数一:查询语句对象
                参数二:显示几条
        6.查询打过度的文档集合。使用TopDocs对象调用scoreDocs方法。返回一个数组。里面装的是要显示的前几条文档。
        7.使用indexSercher对象调用doc方法,经过Luncene自动生成的文档id来查找文档。(查找id等属性用的是索引库中的属性名来查找的)
        8.关流
 
分词器的使用时机:
        1.在建立索引库的时候
        2.在查询的时候
 
 
通用Mapper:
       接口继承Mapper接口,不用写方法,Mapper接口里面提供了方法,能够进行单表的查询。若是想要进行多表的关联查询。能够本身自定义xml。实体类:加注解,类上:@Table 若是类名和数据库的名字同样的话能够不加这个注解。属性的话:@Column  若是实体类的属性名和数据库的属性名一致则能够不写这个注解。主键:加@Id注解,还有主键生成策略。加注解@GeneratedValue(strategy=GenerationType.IDENTITY)主键自增
 
 
 
 
 
 
 
查询
 
 
 
Lucene的field域
        咱们用到的每个域,都须要考虑三件事情
                1.是否须要分词
                        目的:建立索引
                2.是否须要索引
                        目的:快速搜索
                3.是否须要存储
                        目的:是否在前台显示
 
TextField:文本和流类型
        必须分词、必须索引
数字域:(IntField、LongField、doubleField、FloatField)
        必须分词:lucene对数据域采用的是一种特殊的分词方法,这种分词方法可让数字域比较大小更快。lucene底层规定死的
        必须索引
StringField:文本域,通常用于做为一个惟一总体,进行建立索引,通常用于主键id
        必须不分词
        必须索引 
StoredField:存储域
        必须不分词
        必须不索引
        必须存储
 
2.lucene的维护
        lucene其实没有所谓的修改功能,其实所谓的修改功能就是先删除后添加
 
查询的第一种方式
        1.使用QueryParser对象建立Query对象来查询
                能够指定默认域和使用分词域
        2.直接建立TermQuery对象来查询、
                不能指定默认域,也不可使用分词,不经常使用
        3.数字范围查询
                NumericRangeQuery不能够直接new对象,须要调用.new...方法建立对象
        4.组合查询
                BooleanQuery:
        5.指定多个默认搜索域
                MultiFieldQueryParser
 
相关度排序:
        Term  Frequency (tf):一个次在一片文档中出现的次数越多权重越高
        Doucment  Frequency(df):一个词在多少文档中出现了,出现的文档越多,改词的权值越低
        权重值没有最大,只有更大
        设置权重值:
                域 . setBoost(值);
 
 
solr介绍:模糊查询的时候使用solr
        全文检索系统,对外提供的http服务
                1.solr能够直接部署到web容器里面。对外提供对说衣裤增删改查的api
                2.要么你可使用solrJ客户端调用solr的api完成对索引库的增删改查的api
 
 
solr的环境搭建:
        1.准备一台tomcat,并更改端口号,三个端口号
       2.把解压后的solr项目拷贝到tomcat/wabapps下
        3.将example/lib/ext下的日志jar包拷贝到solr项目的lib里
        4.将example/solr拷贝出来并更名为solrHome(随意)
        5.在solr项目 
 
web客户介绍     
Solr能够有多个索引库
Solr的添加修改使用步骤:
        1.建立solr服务,SolrServer server = new HttpSolrServer(solr索引库的地址,浏览器上的);默认指定第一个索引库。
        
        
        2.进行添加文档。使用add方法。参数须要SolrInputDocument对象。
        3.建立SolrInputDocument对象
        4.添加域。
        5.返回response。
        6.提交
Solr的删除:
        1.建立solr服务,SolrServer server = new HttpSolrServer(solr索引库的地址,浏览器上的);默认指定第一个索引库。
      
        2.经过id删除deleteById("id");
        or
           删除全部deleteByQuery("*:*");
        3.提交
Solr的查询:
        1.建立solr服务
        
        2.建立查询语句对象  SolrQuery
        3.设置查询关键词
        4.执行query对象
        5.获取结果集(拿到的是一个集合)
        6.遍历
相关文章
相关标签/搜索