精华内容
下载资源
问答
  • 全文检索技术
    千次阅读 热门讨论
    2019-06-25 08:17:56

    什么是全文检索

    全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能,而且所有全文数据库无一不是海量信息数据库。

    结构化数据搜索

    常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。
    为什么数据库搜索很容易?
    因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。

    非结构化数据查询方法

    (1)顺序扫描法(Serial Scanning)
    所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。
    (2)全文检索(Full-text Search)
    将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。
    这种先建立索引,再对索引进行搜索的过程就叫全文检索(Full-text Search)。
    虽然创建索引的过程也是非常耗时的,但是索引一旦创建就可以多次使用,全文检索主要处理的是查询,所以耗时间创建索引是值得的。

    如何实现全文检索

    可以使用Lucene实现全文检索。Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。

    Lucene实现全文检索的流程

    在这里插入图片描述
    创建索引-获得原始文档-创建文档对象-分析文档-创建索引-查询索引-用户查询接口-创建查询-执行查询-渲染结果
    Lucene是开发全文检索功能的工具包,从官方网站下载

    更多相关内容
  • 使用全文检索技术可以构建像百度、谷歌、京东搜索、淘宝搜索等系统和功能. 在本套课程中,我们将全面的讲解Lucene技术,从简单应用到细节使用再到底层原理都有深入讲解。尤其对Lucene底层的存储结构,搜索算法,...
  • #资源达人分享计划#
  • 一、全文检索的简介 1、全文检索的介绍 1.1、数据分类 结构化数据:格式固定、长度固定、数据类型固定,如:数据库数据。 非结构化数据:格式不固定、长度不固定、数据类型不固定,如:word文档、pdf文档、邮件、...
  • 正在看的ORACLE教程是:Oracle9i的全文检索技术开发者网络Oracle。介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。 >> ...
  • 内容摘要:本文提供了网站如何设计和实现基于SQL Server 2005的全文检索实例,希望能对正在使用SQL Server 2005构建网站搜索的同仁有所裨益。
  • 全文检索技术 sql server
  • Oracle管理Oracle的全文检索技术 Oracle的全文检索技术 Oracle一直致力于全文检索技术的研究当Oracle9iRlease2发布之时Oracle数据库的全文检索技术已经非常完美OracleText使Oracle9i具备了强大的文本检索能力和智能...
  • 中文全文检索技术研究 中文分词技术 中文检索 C++ 倒排
  • 全文检索技术原理

    千次阅读 2019-01-17 17:07:21
    Lucene是solr实现的基础,而Lucene的实现基础是全文检索技术 接下就谈谈基础的全文检索技术实现的原理。 检索是指对数据的,所以检索技术是针对于某一种或特有的类型的数据。而针对于不同的数据类型对应有不同的检索...

    Lucene是solr实现的基础,而Lucene的实现基础是全文检索技术

    接下就谈谈基础的全文检索技术实现的原理。

    检索是指对数据的,所以检索技术是针对于某一种或特有的类型的数据。而针对于不同的数据类型对应有不同的检索方式。
    • 数据的分类

    结构化数据:具有固定格式或有限长度的数据,数据库、元数据
    非结构化数据:长度不定或无固定格式的数据,邮件、Word文档

    • 扫描方法
      顺序扫描法:如想查找某个文档包含某个字符串,从头到尾扫描整个文件,只要含有想要字符串文档都选取,然后进行下一个文档的扫描。对于非结构化文件,速度极慢、效率极低。
      索引:通过对非结构化文件中提取重要的信息然后进行重组的信息。典型的例子——字典检索方式。
    对文中使用到的词稍作解释。
    • 停词:常用的,常见的,通俗的词,如:is 、the 、this等
    • 词元:去除停词以后的关键词。
    • 全文检索:先建立索引,然后对索引进行的搜索的过程。
    • 反向索引:从字符串到文件的映射与从文件到字符串的映射正好相反,故称为反向索引。
    • 倒排表:每个字符串都指向包含次字符串的文档(document)链表
    • 索引创建:将现实世界中所有的结构化和非结构化数据提取信息,创建索引的过程。
    • 搜索索引:就是得到用户的查询请求,搜索创建的索引,然后返回结果的过程。
    全文检索大致分为索引创建和搜索索引两个过程。
    索引过程
    • 获取原文档
      得到原文档,通常采用爬虫类工具从互联网、数据库以及文件系统中获取。
      开源爬虫工具:Nutch(能够抓取和分辨网络web网站的数据) ,jsoup(java的HTML解析器),heritrix(java开发的,开源的网络爬虫工具,扩展性较好)

    • 构建文档
      1)、将获取的原文档传给分词组件,分词组件将文档切分(split)一个个单词
      2)、去除停词(通过与停词集合的比对,存在于分词组件中)
      3)、去除标点
      4)、最后获取词元
      文档(document)包括一个个的域(field),域(field)中存储内容。每个文档中可以有多个域,不同的document中可以有相同的field,一个document中可以有相同的field,但是没个document的ID必须唯一
      5c4041fcf2ef5

    • 分析文档
      1)、将词元传递给语言处理组件
      2)、变为小写
      3)、将词元缩减为词根(如:cars到car、driving到drive)stemming
      4)、将词元转变为词根(如:从drove到drive、driving到drive)lemmatization
      3)、4)不分顺序也不互斥,还有交叉。两者区别在于转变是根据保存某种字典方式做转变;缩减是采用固定算法做缩减,基本为去除后尾。

    • 创建索引
      1)、将得到的词元传给索引组件
      2)、索引组件将得到的词元创建一个字典,并且按照字母顺序升序排列。
      3)、对相同的词元进行合并创建一个文档倒排链表
      如下图中解释:
      a、Document frequency:既文档频率,有多少个文档出现当前词元(下图中allow在两个文档中出现)

      b、Frequenry:频率,当前文档中出现几次当前词元(allow在文档1中出现高的频率为2,在文档2中为1)
      5c40431f0e96d

    搜索过程

    1)、用户输入查询语句
    2)、对查询语句进行词法分析----进行关键字比对,如输入不正确,将关键字做一个普通的词处理(内有关键字库)
    3)、对查询语句进行语法分析----将语句根据语法规则形成语法树
    4)、对查询语句进行语言处理----同索引语言处理
    5)、搜索索引,在反向链表中找到相应的文档链表,并进行合理的差、并操作得到文档链表
    6)、对所得文档进行相关性降序排序(涉及排序算法:空间向量模型算法)

    • 、计算词的权重
    • 、将权重看做向量,查询语句看做向量,每个词是一个维度,进行向量间的余弦值计算,值越大相关性越高,保持两个向量的维度相同,不同则取并集,若不含某词则权重为0。
    搜索引擎组件
    •   Web爬虫
      
    •   数据库:通过web爬虫工具采集的数据存储在数据库中
      
    •   搜索接口:用户与数据库的接口,帮助用户搜索数据库
      
    展开全文
  • Oracle的全文检索技术.pdf
  • 基于Oracle的全文检索技术.pdf
  • Oracle全文检索技术的应用.pdf
  • 全文检索技术—Solr

    千次阅读 2018-04-26 20:28:05
    Solr是Apache组织出品的,一个全文检索引擎系统. Solr作用: solr放在tomcat下就能独立运行,因为它是一个现成的系统. 它通过http对外提供全文检索服务,(对索引和文档的增删改查), 它内部提供通过浏览器就能访问...

    前言:
    solr是一个现成的全文检索引擎系统, 放入tomcat下可以独立运行, 对外通过http协议提供全文检索服务(就是对索引和文档的增删改查服务),企业中可以通过solrJ(solr的客户端的jar包)来调用solr服务。
    这里写图片描述

    Solr与Lucene的区别:
    lucene是一个全文检索引擎工具包, 就是一堆jar包, 它放入tomcat下不能独立运行, 但是我们可以使用lucene来构建全文检索引擎系统;
    solr底层是用lucene来开发的一个全文检索引擎系统, 放入tomcat下就可以独立运行, 对外通过http的形式,提供全文检索服务(索引和文档的增删改查服务).

    一、Solr安装及配置:
    Solr官方网站(http://lucene.apache.org/solr/ )下载Solr4.10.3,Linux下需要下载lucene-4.10.3.tgz,windows下需要下载lucene-4.10.3.zip。

    整合步骤
    这里写图片描述
    这里写图片描述
    这里写图片描述
    Solr域的类型:

    	基本类型:string, long, double等等
    	动态域(dynamicField): 因为域要先定义后使用,对于没有定义的域,使用是会报错的, 所以可以使用动态域模糊匹配域名.
    	主键域(uniquekey): 主键域只有一个, 唯一
    	复制域(copyField): 将多个域中的内容复制到目标域, 从目标域中查询就相当于从多个域中进行查询
    

    集成IK中文分词器:
    这里写图片描述
    schema.xml设置Field
    这里写图片描述
    数据导入到solr

    1、把dataimport插件依赖的jar包添加到solrcore(solrHome\collection1\lib)中
    这里写图片描述
    2、配置solrconfig.mxl文件,添加一个requestHandler。
    这里写图片描述
    3、创建一个data-config.xml,保存到collection1\conf\目录下
    这里写图片描述
    4、重启tomcat
    这里写图片描述

    二、使用Solr管理索引库

    1、solr中索引和文档的增加和删除

    首先根据id来查询,如果在现有的文档库和索引库中查不到则,将这条数据添加进索引库和文档库;若根据id查找到了,则把查找到的删除, 然后将新的数据添加到索引库和文档库。

    2、删除索引格式如下:
    这里写图片描述
    这里写图片描述

    三、使用SolrJ管理索引库

    SolrJ是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务.
    这里写图片描述
    使用步骤:
    这里写图片描述
    代码实现

    增删改

    public class IndexManagerTest {
    
          //solr中没有专门的修改方法, 先是根据id查询,查找到了则先边原来的删掉,再将新的增加, 如果没查询到,则直接增加新的
          @Test
          public void testIndexCreate() throws Exception{
    	     //指定solr默认服务的url, 如果想连接其他实例可以   http://localhost:8080/solr/collection2
    	   SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    	   //创建solr文档对象, 域一定要先定义后使用,在solr服务端中的schema.xml中定义
    	   //一定要有id域
    	   SolrInputDocument doc = new SolrInputDocument();
    	   doc.addField("id", "a001");
    	   doc.addField("title_ik", "国人");
    	   doc.addField("content_ik", "我是中国人");
    	   solrServer.add(doc);
    	   //提交
    	   solrServer.commit();
       }
    
       @Test
       public void testDelIndex() throws Exception{
    	   //连接默认实例, collection1
    	   SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    	   //根据id删除
    	   //solrServer.deleteById("a001");
    	   //删除所有
    	   solrServer.deleteByQuery("*:*");
    	   //提交
    	   solrServer.commit();
       }
    

    }

    public class IndexSearchTest {
    
    	@Test
    	public void testIndexSearchSample() throws Exception{
    		SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    		
    		//创建查询条件对象
    		SolrQuery solrQuery = new SolrQuery();
    		//查询所有
    		solrQuery.setQuery("*:*");
    		
    		//查询并返回响应
    		QueryResponse queryResponse = solrServer.query(solrQuery);
    		//从响应中获取查询结果集
    		SolrDocumentList results = queryResponse.getResults();
    		
    		//查询到的数据的总数
    		System.out.println("=====count=====" + results.getNumFound());
    		
    		//遍历结果集
    		for(SolrDocument doc : results){
    			//根据域名取出数据
    			System.out.println(doc.get("id"));
    			System.out.println(doc.get("product_name"));
    			System.out.println(doc.get("product_price"));
    			System.out.println(doc.get("product_picture"));
    			System.out.println("=========================");
    		}
    	}
    	
    	  @Test
    	  public void testIndexSearch() throws Exception{
    		  SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
    		
    		  //创建查询条件对象
    		  SolrQuery solrQuery = new SolrQuery();
    		  //设置查询条件
    		  solrQuery.setQuery("台灯");
    		  //设置过滤条件
    		  solrQuery.addFilterQuery("product_price:[1 TO 100]");
    		  //设置按照价格排序, 这里是升序
    		  solrQuery.setSort("product_price", ORDER.asc);
    		
    		  //设置分页
    		  //从第几条开始查询
    		  solrQuery.setStart(0);
    		  //查询多少条
    		  solrQuery.setRows(10);
    		
    		  //设置查询到后显示哪些域
    		    solrQuery.addField("id,product_name,product_price,product_catalog_name,product_picture");
    		
    		  //设置默认搜索域, df代表默认搜索域, 后面的是域名
    		  solrQuery.set("df", "product_keywords");
    		
    		  //设置高亮显示: 高亮默认是关闭的, 需要开启
    		  solrQuery.setHighlight(true);
    		  //设置需要高亮显示的域名
    		  solrQuery.addHighlightField("product_name");
    		  //设置高亮前缀
    		  solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
    		  //设置高亮后缀
    		  solrQuery.setHighlightSimplePost("</span>");
    		
    		
    		  //查询并返回响应
    		  QueryResponse queryResponse = solrServer.query(solrQuery);
    		  //从响应中获取查询结果集
    		  SolrDocumentList results = queryResponse.getResults();
    		
    		  //查询到的数据的总数
    		  System.out.println("=====count=====" + results.getNumFound());
    		
    		  //遍历结果集
    		  for(SolrDocument doc : results){
    			  //根据域名取出数据
    			  System.out.println(doc.get("id"));
    			
    			  //获取高亮显示结果
    			  Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
    			  if(highlighting != null){
    				  List<String> list = highlighting.get(doc.get("id")).get("product_name");
    				  if(list != null && list.size() > 0){
    					  System.out.println("==hlighting==" + list.get(0));
    				  }
    			  }
    			
    			
    			  System.out.println(doc.get("product_name"));
    		      System.out.println(doc.get("product_price"));
    		  	  System.out.println(doc.get("product_picture"));
    			  System.out.println("===================");
    		  }
    	  }
    

    }

    四、案例实现
    1、流程图
    这里写图片描述
    2、创建一个web工程导入jar包(springmvc的相关jar包+solrJ的jar包+Example\lib\ext下的jar包)
    3、配置SpringMvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    		xmlns:context="http://www.springframework.org/schema/context"
    		xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    	        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
    	        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
    	        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
    	        
    	        <!-- 配置@Controller注解扫描 -->
    	        <context:component-scan base-package="cn.itcast"></context:component-scan>
    	        
    	        <!-- 注解驱动: 相当于显示的配置了最新版的注解形式的处理器映射器和处理器适配器 -->
    	        <mvc:annotation-driven/>
    	        
    	        <!-- 视图解析器 -->
    	        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    	        	<property name="prefix" value="/WEB-INF/jsp/"></property>
    	        	<property name="suffix" value=".jsp"></property>
    	        </bean>
    	        
    	        <!-- SolrServer的配置 -->
    			<bean id="httpSolrServer" class="org.apache.solr.client.solrj.impl.HttpSolrServer">
    				<constructor-arg index="0" value="http://localhost:8080/solr"/>
    			</bean>
    	       
    	</beans>
    

    4、配置Web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    	  <display-name>solrjd0608</display-name>
    	  <welcome-file-list>
    	    <welcome-file>index.html</welcome-file>
    	    <welcome-file>index.htm</welcome-file>
    	    <welcome-file>index.jsp</welcome-file>
    	    <welcome-file>default.html</welcome-file>
    	    <welcome-file>default.htm</welcome-file>
    	    <welcome-file>default.jsp</welcome-file>
    	  </welcome-file-list>
    	  
    	  <!-- 配置springMvc前端控制器 -->
    		<servlet>
    			<servlet-name>springmvc</servlet-name>
    			<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    			<init-param>
    				<param-name>contextConfigLocation</param-name>
    				<param-value>classpath:SpringMvc.xml</param-value>
    			</init-param>
    			<load-on-startup>1</load-on-startup>
    		</servlet>
    		<servlet-mapping>
    			<servlet-name>springmvc</servlet-name>
    			<url-pattern>*.action</url-pattern>
    		</servlet-mapping>
    	  
    	  <!-- 处理Post乱码 -->
    	  <filter>
    			<filter-name>CharacterEncodingFilter</filter-name>
    			<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    			<init-param>
    				<param-name>encoding</param-name>
    				<param-value>utf-8</param-value>
    			</init-param>
    		</filter>
    		<filter-mapping>
    			<filter-name>CharacterEncodingFilter</filter-name>
    			<url-pattern>/*</url-pattern>
    		</filter-mapping>
    	</web-app>
    

    5、实体类
    这里写图片描述
    这里写图片描述
    5、Controller
    这里写图片描述
    6、Service

    @Service
    public class ProductServiceImpl implements ProductService {
    	//设置每页显示条数
    	private final static Integer PAGE_SIZE = 60;
    
    	@Autowired
    	private ProductDao productDao;
    
    	@Override
    	public ResultModel querySolr(String queryString, String catalog_name, 
    			String price, Integer page, String sort) throws Exception{
    		
    		//创建查询条件对象
    		SolrQuery solrQuery = new SolrQuery();
    		
    		//设置默认搜索域
    		solrQuery.set("df", "product_keywords");
    		
    		//设置查询条件
    		if(queryString != null && !"".equals(queryString)){
    			solrQuery.setQuery(queryString);
    		} else {
    			solrQuery.setQuery("*:*");
    		}
    		
    		//设置过滤条件按照分类查询
    		if(catalog_name != null && !"".equals(catalog_name)){
    			solrQuery.addFilterQuery("product_catalog_name:" + catalog_name);
    		}
    		
    		//设置过滤条件  按照价格区间进行查询
    		if(price != null && !"".equals(price)){
    			String[] split = price.split("-");
    			if(split != null && split.length > 1){
    				solrQuery.addFilterQuery("product_price:["+split[0]+" TO "+split[1]+"]");
    			}
    		}
    		
    		//按照价格进行排序
    		if("0".equals(sort)){
    			solrQuery.setSort("product_price", ORDER.asc);
    		} else {
    			solrQuery.setSort("product_price", ORDER.desc);
    		}
    		
    		//设置起始页
    		if(page == null){
    			page = 1;
    		}
    		
    		//设置从第几条开始查
    		Integer start = (page - 1) * PAGE_SIZE;
    		solrQuery.setStart(start);
    		//设置每页显示条数
    		solrQuery.setRows(PAGE_SIZE);
    		
    		//设置高亮显示
    		//开启高亮显示
    		solrQuery.setHighlight(true);
    		//设置高亮显示的域
    		solrQuery.addHighlightField("product_name");
    		//设置高亮显示前缀
    		solrQuery.setHighlightSimplePre("<span style=\"color:red\">");
    		//设置高亮显示后缀
    		solrQuery.setHighlightSimplePost("</span>");
    		
    		//调用dao查询,并返回结果
    		ResultModel resultModel = productDao.query(solrQuery);
    		//设置当前页
    		resultModel.setCurPage(page);
    		
    		//计算总页数
    		Long pageCount = resultModel.getRecordCount() / PAGE_SIZE;
    		if(resultModel.getRecordCount() % PAGE_SIZE > 0){
    			pageCount++;
    		}
    		resultModel.setPageCount(pageCount);
    		return resultModel;
    	}
    }    
    

    7、Dao

     @Repository
     public class ProductDaoImpl implements ProductDao {
    		@Autowired
    		private SolrServer solrServer;
    	
    		@Override
    		public ResultModel query(SolrQuery solrQuery) throws Exception {
    			//通过solr服务端查询,并返回响应
    			QueryResponse queryResponse = solrServer.query(solrQuery);
    			
    			//返回的数据对象
    			ResultModel resultModel = new ResultModel();
    			List<ProductModel> productList = new ArrayList<ProductModel>();
    			
    			//从响应中获取结果集
    			SolrDocumentList results = queryResponse.getResults();
    			if(results != null){
    				//获取查询到的总记录数
    				resultModel.setRecordCount(results.getNumFound());
    				//遍历结果集
    				for(SolrDocument doc : results){
    					ProductModel product = new ProductModel();
    					product.setPid(String.valueOf(doc.get("id")));
    					
    					//获取高亮数据
    					Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
    					if(highlighting != null){
    						List<String> list = highlighting.get(doc.get("id")).get("product_name");
    						if(list != null && list.size() > 0){
    							product.setName(list.get(0));
    						} else {
    							product.setName(String.valueOf(doc.get("product_name")));
    						}
    					} else {
    						product.setName(String.valueOf(doc.get("product_name")));
    					}
    					
    					
    					if(doc.get("product_price") != null && !"".equals(doc.get("product_price"))){
    						product.setPrice(Float.valueOf(String.valueOf(doc.get("product_price"))));
    					}
    					
    					product.setCatalog_name(String.valueOf(doc.get("product_catalog_name")));
    					product.setPicture(String.valueOf(doc.get("product_picture")));
    					
    					//将单个的ProductModel对象放入集合中
    					productList.add(product);
    				}
    				//将封装后的结果集放入返回对象中
    				resultModel.setProductList(productList);
    			}
    			return resultModel;
    		}
    	
    	}
    
    展开全文
  • SQLServer2005全文检索技术[归纳].pdf
  • 基于Oracle的文献资料库全文检索技术.pdf
  • ORACLE全文检索技术的应用研究及其优化.pdf
  • 基于Oracle Text电子政务全文检索技术的应用.pdf
  • Oracle全文检索技术在高校图书馆的应用.pdf
  • 基于Oracle大数据的全文检索技术研究与实现.pdf
  • ORACLE全文检索技术的应用及其优化的分析.pdf
  • 全文检索技术学习(三)——Lucene支持中文分词 - 李阿昀的博客 - CSDN博客首页博客学院下载图文课论坛问答商城活动招聘搜博主文章写博客小程序全文检索技
  • Oracle Text全文检索技术在文档资料管理中的应用.pdf
  • Oracle全文检索技术在海量数据挖掘中的应用.pdf
  • 无纸化考试系统中SQL Server 2000全文检索技术的应用.pdf
  • 全文检索技术在远程取证中的应用研究,潘茂如,,阐述了当前远程取证的特点,分析了远程取证模式和全文检索技术,提出将全文检索技术应用到远程取证的证据采集端,设计并实现了一
  • Lucene和全文检索技术的关系——前者是后者的工具,也就是说Lucene是实现全文检索的工具之一。除了Lucene之外,还会很多其它实现全文检索的技术。 搜索背景     目前很多大型的网站,都离不开...

        在真正介绍Lucene之前,需要简单了解一下全文检索技术。Lucene和全文检索技术的关系——前者是后者的工具,也就是说Lucene是实现全文检索的工具之一。除了Lucene之外,还会很多其它实现全文检索的技术。

    搜索背景

        目前很多大型的网站,都离不开搜索。比如京东、天猫、淘宝等各大电商网站,美团、58同城等生活服务类平台,百度、google等搜索引擎更不用说。
         搜索数据的特点主要有几大方面:数据量庞大、要求速度快、要求搜索准确。而其中大数据的特点有4个V:Volume(大量)、Variety(多样)、Velocity(高速)、Value(价值)。
         随着互联网的发展,人们对搜索的质量、速度的要求在不断提升,直接推动了搜索技术的改良和升级。

    传统搜索技术的瓶颈

    文件系统检索

        将文档、其它文本文件内容加载到内存进行关键字匹配,在数据量特别大时,显得力不从心。

    数据库检索

        对数据库的性能要求较高,虽然能够保证对大量数据的检索,但是检索速度无法保证。

    全文检索技术

    定义

    百度百科对全文检索的定义:

        全文数据库是全文检索系统的主要构成部分。所谓全文数据库是将一个完整的信息源的全部内容转化为计算机可以识别、处理的信息单元而形成的数据集合。全文数据库不仅存储了信息,而且还有对全文数据进行词、字、段落等更深层次的编辑、加工的功能,而且所有全文数据库无一不是海量信息数据库。

    我们从这个定义可以看出,全文检索是围绕全文数据库展开的。

    检索系统架构

    以百度搜索为例。
    一个完整的检索系统,包含三大部分:
    (1)数据采集:将分散的数据进行收集,比如网页、日志、各类文档。
    (2)数据整理:将无序散乱的数据进行整理计算,变为结构化的数据,并将整理的结构化数据通过分词技术、索引算法建立索引数据库。
    (3)检索系统:提供搜索服务,通过一系列其它web技术,对全文数据库的数据进行数据查询返回,供用户使用。

    整体流程类似于下方的简化模型:
    在这里插入图片描述
    爬虫在互联网上抓取数据到文件系统,然后对文件系统中的数据进行整理,创建出索引,最后为上层Web应用提供数据来源。

    Lucene介绍

    什么是Lucene

        Lucene目前非常流行。Lucene之所以好用,是因为它是一个工具包的概念。最初是由Doug Cutting开发的,在SourceForge的网站上提供下载。在2001年9月作为高质量的开源Java产品加入到Apache软件基金会的Jakarta家族中。随着每个版本的发布,这个项目得到明显的增强,也吸引了更多的用户和开发人员。
        Lucene是全文检索技术的一个工具包,为全文索引技术的开发提供支持。换句话讲,Lucene是全文搜索技术,但是全文检索技术就不一定是Lucene。

    Lucene的特点

    (1)原生Java语言开发,所以天然具备跨平台的能力,对Java的整合也比较友好。
    (2)全文检索数据库中,索引数据结构的占比不大于数据信息的20%。
    (3)提供了丰富的检索功能:

    • 词项查询
    • 多域查询
    • 布尔查询
    • 范围查询
      等等。

    目前就介绍这么多,后面会在全文检索这个系列更新更多其它内容。

    展开全文
  • solr全文检索实现原理

    2021-01-27 12:54:12
    Lucene是apache软件基金会4jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 301,820
精华内容 120,728
关键字:

全文检索技术