solr

solr

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

【总结】

  1. solr式独立的搜索服务器(直接用:war包-----部署到tomcat里)
  2. solr是基于lucene开发的(lucene只是一套全文检索的工具包–api)。

项目用到solr的地方:

  1. 商品信息保存到索引库中。
  • 我们需要在item类中添加注解@Field注解.
  • 添加springdatasolr的配置文件
  • 商品审核成功后将数据保存到索引库中。
  1. 商品检索的时候,入参(传递的条件):
    • 搜索的关键字
    • 商品的分类
    • 商品的品牌
    • 商品的规格
    • 商品的价格,新品等等。
  2. 可以将入参的条件进行封装(key1:value1 ,key2:value2)到map集合中。
  3. 出参(返回值):
    • 商品的结果集
    • 商品的分类
    • 商品的品牌
    • 商品的规格

5.返回的值也可以封装成map集合。

检索的过程:通过关键字------>加载分类-------------》品牌结果集,规格结果集。

  1. 将库存表的数据全部保存到索引库中。
    • 库存表中有一个字段叫spec,spec:{“机身内存”:“16G”,“网络”:“联通3G”}-----》转成map(JSON.parseObject(spec,map.class)?
    • 前台系统的关键字的检索。springdatasolr里面提供了高亮的api(hightlightoption()),先拿到list(hightlighted),遍历拿到list(hightlightentry),hightlightentry.get(0).getsnipplets(0).get(0)就可以将关键字进行高亮。

solr的底层分析:

我们得先了解lucene这个全文检索库,生活中数据大体分两种,其一:结构化的数据,指具有固定的格式或有限长度的数据,如数据库,元数据。其二:非结构化数据,指不定或无固定的格式的数据,如邮件,word文档。

对非结构数据,也就是全文检索主要有两种方法,顺序扫描法,就一个一个文档的看,浪费时间。顺序扫描对结构化的数据搜索相对较快,采取了算法加速检索。有人就提出了,那我们将非结构弄得有结构就可以了,这是构成全文检索得基本思路,也就是将非结构得数据得一部分信息提取出来,重新组织,使其变得有结构,从而达到检索相对较快。这部分的从非结构中提取出来的数据重新组织后的信息,我们就叫索引

这种先建立索引的,再对索引进行搜索的过程就叫全文检索

1.【 索引的时候】:计算机通过索引程序,扫描文件中的每个词语,建立词语与文件的对应的关系,把对应的关系保存在索引库。索引的流程:

采集数据
建立文档对象
分析文档
建立索引

2.【 搜索到时候】:计算机通过检索的程序,根据用户的输入的关键的词,在索引库搜索目标内容。
检索流程:

用户查询
建立查询对象
执行查询
返回查询结果
  1. 【采集数据】:通过jdbc操作获取数据库数据。通过io操作获取文件上的数据。通过爬虫获取网络上的网页数据。
  2. 【建立文档对象】:一个文档对象中包含多个域(Field),一个文档对象就相当于关系数据库表中的一条记录,一个域相当于一个字段。
    6.【 分析文档】:把原始数据转换成文档对象,使用分词器将域中内容切分一个一个词语,目的方便后续的建立索引做准备。
  3. 【建立索引】:建立倒排索引,建立词语与文档的对应的关系,词语在什么文档出现,出现几次,在什么位置出现。将倒排索引保存到索引库中。
  4. 【建立查询对象】:根据用户输入的关键字,建立查询对象(Query),Query对象会生成查询的语法,比如bookname:java,表示搜索图书名称域中的,包含java的图书。
    分词器的介绍:
    为什么要用到分词器?
    • 在对文档中的内容进行索引前,需要对域Field中的内容使用分析对象(分词器)进行分词,分词的目的是为了索引,索引的目的是为了搜索。过程是先分词,再过滤。
      • 分词:将文档中的域Field的值切分成一个一个的单词,具体怎么分根据使用的分词器不同。
      • 过滤:去除标点符号,去除停用词(的,啊,是等等),为什么用到停用词,为了节省空间,提高检索的效率。
    • 第三方的中文分词器,ik
      • ik分词器就是扩展了lucene的分词器(analyzer),使用方式与lucene分词器一样。
      • 图书的id,不分词,需索引,需存储。-------stringfield
      • 图书的名称,需分词,需索引,需存储-----------textfield
      • 图书价格,需分词,需索引,需存储---------doublefield
      • 图书图片,不分词,不索引,需存储。------------storefield
      • 图书描述,需分词,需索引,不存储。-------Textfield
关键词            文章号[出现频率]              出现位置   
guangzhou           1[2]                      3,6   
he                  2[1]                      1   
i                   1[1]                      4   
live                1[2]                      2,5, 
                    2[1]                      2   
shanghai            2[1]                      3   
tom                 1[1]                      1 

(2019.6.10)补充:

用到solr来做搜索,怎么实现搜索的精准度的?

solr是用来干嘛的?
基于Lucene,主要做全文检索。同样技术,es
小项目直接数据库查询,大点的项目用solr,es,大部分查询都是like查询,引进全文检索技术(用solr,不用es)
大概介绍介绍?
设计到两个端(客户端,服务端)
服务端,安装解压war包,添加jar包,配置schema.xml
客户端用到spring-data-solr,封装给了service,controller直接传入对象给service就好。
Solr 是传统搜索应用的有力解决方案(电商项目),但 Elasticsearch(新浪微博评论吐槽) 更适用于新兴的实时搜索应用
solr和es?为什么考虑solr
es维护较少,只支持json文件格式,不过开箱即用,solr成熟,社区更加成熟支持json,xml,安装复杂点。
通过关键字–》加载分类----》品牌结果集,规格结果集(爬山靴子,什么码数,什么颜色),默认就加载第一个分类下的品牌结果集,规格结果集。提高搜索精准度用到分配权重。

将检索到的数据封装到一个map中,根据关键字分页,高亮,加载分类结果集,加载品牌,规格结果集,模糊查询:criteria.is(keywords);//is不是等于某个值。is方法:根据词条进

行模糊检索 like%%。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值