Solr全文搜索的简单介绍

全文检索技术

  • 是一种技术手段,实现该技术的框架 Lucene (全文检索工具包, 基于 Java语言编写的) 、
  • 通常在 企业中 会 使用 全文检索服务器 代替 Lucene, 常见的 全文检索服务器 有 solr , elasticsearch (es)
  • Solr 是一个企业级全文检索服务器,支持 集群的搭建 , 适用于 中小型平台,常用于 电商平台
  • elasticsearch 是一个分布式全文检索服务器。

全文检索的实现方式

倒排索引算法 !

常见的检索方式有哪些?

  • 顺序查找 : 特点 从上到下依次查找,效率低, 准确率非常高。
  • 二分法查找 : 特点 要求 查询的数据是经过排序后的, 查找效率高。
  • 结构化查询 : 主要针对的是 关系型数据库中的数据进行查找的方法, 性能却决于数据库的 引擎、索引类型、索引方式、查找方式。
  • 索引查询 : 效率是最高的, 主要适用于 线性表 (数组、List列表)
  • Hash索引查询 : 会产生 Hash 碰撞、需要解决 hash冲突的问题,
  • 全文检索 : 采用倒排索引 对需要检索的内容 进行 搜索 ,效率是很高的,准确率很低

数据的分类

  • 结构化数据 : 适用于 结构化查询, 常见用于 关系型数据库
  • 半结构化数据 : JSON , HTML, XML 均属于 半结构化 数据。
  • 非结构化数据:

什么是 倒排索引

倒排索引 最核心的 操作 是 分词 技术 。

 (Data)
奇酷网络有限公司 :    ------>  1   
独角兽责任有限公司:   -------> 2 

(Index)
   奇酷                    ----------   1
   网络                    ----------   1
   有限                    ----------   1, 2
   公司                    ----------   1, 2
   网络有限公司            ----------   1
   有限公司                ----------   1, 2

   独角兽                  ----------- 2
   责任                    ----------- 2 


网络公司 :   ----------- 请问会检索到啥 ???
   
   网络      ------------>  1
   公司      ------------>  1, 2      对检索后的结果 ID 值 进行 统计 ,按照统计的结果 (权重) 进行降序排列 
   
通常查找数据采用主键找数据、 反过来 通过关键词 找 主键 的检索方式 就可以理解为 倒排索引 !

Solr 常见的 分词器

  • 标准分词器 (英文按照 空格 、标点符号进行分号, 中文 是按照 字符分割), 中文分词非常不理想
  • 中日韩分词器 (两个字符追个分词)
  • 庖丁解牛 分词器 (停更)
  • Ik 分词器 (相对来说比较智能、能够满足日常中文分词、支持扩展字典、动态字典、停用词等配置)

Solr 的核心 - Solr Core

  • Solr Home : 用户进行存放 所有 的 Solr Core 的目录,等价于 MySQL 数据库数据仓库
  • Solr Core : 可以理解为 MySQL数据库的 database , 每一个 Solr Core 之间是 相互独立的。
    • conf : 配置 ,数据的定义信息
    • data : 数据
    • index : 索引

Solr 是 如何 进行数据存储的

Solr 存储的一条数据 代表一个 document , 一个 document 中 包含 多个 域 (field)

Solr 定义域的方式

  • 普通域 : field
    <field name="id" type="string" indexed="true" stored="true" required="true"/>
    
  • 动态域 : 域名不是确定的,支持通配符 * 动态匹配
    <dynamicField name="*_dt" type="pdate" indexed="true" stored="true"/>
    
  • 复制域 : 将多个域中的数据 合并到 一个域 , 就是一个 复制域
    <copyField source="summary" dest="text"/>
    
  • 主键域:
    <uniqueKey>id</uniqueKey>
    

Solr field / dynamicField 域 常见的属性

  • name : 设置域名 , 如果是 dynamicField, 支持 通配符 。
  • type : 设置 域的类型, 支持的类型 由 配置文件中 fieldType 决定, 不同类型的域 分词手段不一样。
    • string : 不支持 分词
    • pint : 用来存储整数、 不支持 分词
    • pfloat : 用来存储 小数, 不支持分词
    • pdate : 用来存储日期, 不支持 分词
    • text_ik : IK 分词器 , 支持中文分词
    • text_en_splitting : 支持英文分词
  • indexed : 设置 域 是否 进行索引 , 衡量一个域 要不要 添加索引, 取决于 要不要根据 该域 进行查询 。
  • stored : 设置 域 对应的 值 是否 进行存储 、域对应的值如果需要直接使用, 建议存储。土豪随意~~~~。
  • required : 设置 对应的值 是否允许为空, 该 属性 通常 用在 主键域 上。
  • multiValued : 该域对应的值 是否是 多值 , 该属性 一般 作用在 复制域 对应的 域中

数据导入配置

<dataConfig>
    <dataSource driver="com.mysql.cj.jdbc.Driver" 
		url="jdbc:mysql://localhost:3306/rss2" 
		user="root" password="123456" />
    <document>
        <entity name="resource" query="select id, resource_name, keywords, score, size, ext, 
			date_format(create_time, '%Y-%m-%dT%H:%i:%sZ') create_time from tb_resource"
                deltaQuery="select id from tb_resource where last_modified > '${dataimporter.last_index_time}'">
				
            <field column="id" name="id" />
			      <field column="resource_name" name="resourceName" />
      			<field column="keywords" name="keywords" />
      			<field column="score" name="vscore" />
      			<field column="size" name="size" />
      			<field column="ext" name="ext" />
      			<field column="create_time" name="create_time" />

        </entity>
    </document>
</dataConfig>

pdate 日期类型,支持的 日期格式为 yyyy-MM-ddTHH:mm:ssZ , 所以需要使用 date_format 格式化 日期,以满足数据格式。

  • dataSource 配置数据源
  • driver : 设置数据库驱动
  • url : 设置数据库连接信息
  • user : 设置数据库账号
  • password : 设置数据库密码
  • document 描述一条信息的配置
    • entity : 用来定义一个 实体类、和数据库中的表 对应
      • name : 实体类名、可任意
      • query : 全表数据导入 SQL语句
      • deltaQuery : 增量导入 SQL语句
      • field : 定义 域 和 字段的映射关系
        • column : 字段名
        • name : 域名
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值