数据检索

基于Lucene的搜索引擎的设计与实现

梦想与她 提交于 2020-01-11 01:18:09
我们处在一个大数据的时代,伴随着网络信息资源的庞大,人们越来越多地注重怎样才能快速有效地从海量的网络信息中,检索出自己需要的、潜在的、有价值的信息,从而可以有效地在日常工作和生活中发挥作用。因为搜索引擎这一技术很好的解决了用户搜索网上大量信息的难题,所以在当今的社会,无论是发展迅猛的计算机行业,还是作为后起之秀的信息产业界,都把Web搜索引擎的技术作为了争相探讨与专研的方向。 搜索引擎的定义就是指按照既定的 策略 与方法,采取相关的 计算机程序 ,通过在 互联网 中进行寻找信息,并显示 信息 ,最后把找到的信息进行整理和筛选,为搜索引擎的使用者提供 检索 信息的服务,终极目标是为了提供给使用者,他所搜索信息相关的资料的计算机 系统 。搜索引擎的种类繁多,既可以进行 全文的索引 ,还可以进行 目录的索引 ,不仅有集合式的搜索引擎,还有 垂直搜索的引擎 以及 元搜索引擎 。除此之外,还有门户搜索引擎和免费链接列表等等 经过对搜索引擎的研究同时与Lucene自身的特性相结合,将本次设计所需要实现的功能阐述如下: 支持桌面文件搜索,格式包括txt、doc、xls和ppt; 支持分词查询 支持全文搜索 能够高亮显示搜索关键字 显示查询所用的时间 显示搜索历史、过滤关键字 分词查询与全文搜索这两项功能,我们都可以利用Lucene本身自带的库加上相关算法就可以完成设计了

MySQL的InnoDB索引原理详解

自闭症网瘾萝莉.ら 提交于 2020-01-10 16:19:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM, 文档 )。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分。 先看看几种树形结构: 1 搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构。 2 B树:一棵m阶B树是一棵平衡的m路搜索树。最重要的性质是每个非根节点所包含的关键字个数 j 满足:┌m/2┐ – 1 <= j <= m – 1;一个节点的子节点数量会比关键字个数多1,这样关键字就变成了子节点的分割标志。一般会在图示中把关键字画到子节点中间,非常形象,也容易和后面的 B+树区分。由于数据同时存在于叶子节点和非叶子结点中,无法简单完成按顺序遍历B树中的关键字,必须用中序遍历的方法。 3 B+树

【论文翻译】Deep Visual-Semantic Hashing for Cross-Modal Retrieval

笑着哭i 提交于 2020-01-06 17:57:25
Deep Visual-Semantic Hashing for Cross-Modal Retrieval 用于跨模态检索的深度视觉语义哈希 摘要: 由于哈希算法具有较高的存储和检索效率,在大规模多媒体检索中被广泛应用于近似近邻搜索。跨模态哈希能够有效地检索图像以响应文本查询,反之亦然,近年来受到越来越多的关注。现有的大多数跨模态哈希研究工作都没有捕捉到图像的空间依赖性和文本句子的时间动态,从而学习强大的特征表示和跨模态嵌入,从而缓解了不同模式的异质性。摘要提出了一种新的深度视觉语义哈希(DVSH)模型,该模型在端到端深度学习体系结构中生成图像和句子的紧凑哈希码,捕捉视觉数据与自然语言之间的内在跨模态对应关系。DVSH是一种混合的深度架构,它构成了一个用于学习图像和文本句子的联合嵌入空间的可视化语义融合网络,以及两个用于学习哈希函数以生成紧凑二进制代码的特定于模态的哈希网络。我们的架构有效地统一了联合多模态嵌入和交叉模态哈希,它是基于图像上的卷积神经网络、句子上的递归神经网络和一个结构化的最大裕度目标的新组合,该目标将所有东西集成在一起,从而能够学习保持相似性和高质量的哈希码。大量的经验证据表明,我们的DVSH方法在图像-句子数据集的跨模态检索实验中,即标准的IAPR TC-12和大规模的Microsoft COCO中,得到了最先进的结果。 1.介绍 而海量

elasticsearch数据输入和输出

风流意气都作罢 提交于 2020-01-05 02:52:04
Elastcisearch 是分布式的 文档 存储。它能存储和检索复杂的数据结构–序列化成为JSON文档–以 实时 的方式。 换句话说,一旦一个文档被存储在 Elasticsearch 中,它就是可以被集群中的任意节点检索到。 在 Elasticsearch 中, 每个字段的所有数据 都是 默认被索引的 。 即每个字段都有为了快速检索设置的专用倒排索引。而且,不像其他多数的数据库,它能在 相同的查询中 使用所有这些倒排索引,并以惊人的速度返回结果。 文档 不同于传统数据库,为了完美表现对象的灵活性,elasticsearch使用JSON这种标准格式,以一种人可读的文本表示对象。 在大多数应用中,多数实体或对象可以被序列化为包含键值对的 JSON 对象。 一个 键 可以是一个字段或字段的名称,一个 值 可以是一个字符串,一个数字,一个布尔值, 另一个对象,一些数组值,或一些其它特殊类型诸如表示日期的字符串,或代表一个地理位置的对象: { "name": "John Smith", "age": 42, "confirmed": true, "join_date": "2014-06-01", "home": { "lat": 51.5, "lon": 0.1 }, "accounts": [ { "type": "facebook", "id": "johnsmith" }, {

自然语言处理在现实生活中运用

浪尽此生 提交于 2019-12-31 15:48:09
自己动手搭建搜索工具 作者 白宁超 2016年4月12日16:31:48 摘要: 搜索已经作为生活中不可缺少的一部分,诸如:百度、 google 、还是在微信上寻找好友或者通过一段文本查找关键字。另外亚马逊、京东、天猫、苏宁等电商在搜索中也是别有洞天(多面搜索等)。对于开发人员,搜索往往是大部分应用的关键功能,特别是对大规模文本数据驱动应用更是如此。另一类搜索像语音智能检索,其采用分类、聚类、神经网络等方法进行模型评估,反馈给用户比较理想的匹配结果,这里需要强调的是其采用评分机制反馈的模糊近似查询结果,与传统精确采用是不一样的。这种结果的反馈评分主要依托正确率和召回率。这里自己构建搜索工具好处在于:灵活性、开发费用低、自己更了解自己的搜索工具、价格当然是免费的啦。本文作者花费大量时间,经过资料收集,研究和实验所得,旨在技术分享。( 本文原创,转载需说明出处: 自己动手搭建搜索工具。 ) 目录 【文本挖掘(0)】 快速了解什么是自然语言处理 【文本挖掘(1)】 OpenNLP:驾驭文本,分词那些事 【文本挖掘(2)】 【NLP】Tika 文本预处理:抽取各种格式文件内容 【文本挖掘(3)】 自己动手搭建搜索工具 1 Apache Solr 搜索服务器简介 1.1. Solr 是什么? Solr 它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web

微信扫物上线,全面揭秘扫一扫背后的识物技术!

孤街浪徒 提交于 2019-12-30 16:21:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 导语| 12月23 日,微信扫物 iOS 版本正式上线。从识别特定编码形态的图片,到精准识别自然场景中商品图片,有哪些难点需要去克服? 扫物以图片作为媒介,聚合微信内部有价值的生态内容如电商,百科,资讯进行展示, 会催生哪些新的落地场景?本文将细细道来。 作者| breezecheng,腾讯 WXG 应用研究员 编辑| sukeli、尾尾 微信长期招收计算机视觉和OCR方向的人才, 欢迎简历breezecheng@tencent.com ​一. 扫一扫识物概述 1.1 扫一扫识物是做什么的? 扫一扫识物是指以图片或者视频(商品图:鞋子/箱包/美妆/服装/家电/玩具/图书/食品/珠宝/家具/其他商品)作为输入媒介来挖掘微信内容生态中有价值的信息(电商+百科+资讯,如图 1 所示),并展示给用户。这里我们基本覆盖了微信全量优质小程序电商涵盖上亿商品 SKU,可以支持用户货比 N 家并直接下单购买,百科和资讯则是聚合了微信内的搜一搜、搜狗、百度等头部媒体,向用户展示和分享与该拍摄商品相关的资讯内容。 图1 扫一扫识物功能示意图 百闻不如一试,欢迎大家更新 iOS 新版本微信 → 扫一扫 → 识物自行体验,也欢迎大家通过识物界面中的反馈按键向我们提交体验反馈。图 2 即为扫物实拍展示。 扫一扫识物实拍展示 1.2

Lucene 教程

允我心安 提交于 2019-12-27 03:34:53
Lucene是apache组织的一个用java实现全文搜索引擎的开源项目。 其功能非常的强大,api也很简单。总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field可以看作是数据库的字段。用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单。 Lucene2.0,它与以前广泛应用和介绍的Lucene 1.4.3并不兼容。 Lucene2.0的下载地址是 http://apache.justdn.org/lucene/java/ 例子一 : 1、在windows系统下的的C盘,建一个名叫s的文件夹,在该文件夹里面随便建三个txt文件,随便起名啦,就叫"1.txt","2.txt"和"3.txt"啦 其中1.txt的内容如下: 中华人民共和国 全国人民 2006年 而"2.txt"和"3.txt"的内容也可以随便写几写,这里懒写,就复制一个和1.txt文件的内容一样吧 2、下载lucene包,放在classpath路径中 建立索引: package lighter.javaeye.com; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io

Lucene的学习

拟墨画扇 提交于 2019-12-26 20:18:32
一,什么是全文检索 1.数据的分类   1.结构化数据     格式固定,长度固定,数据类型固定。     例如:数据库中的数据;   2.非结构化数据     word文档,pdf文档,邮件,html,txt     格式不固定,长度不固定,数据类型也不固定 2.数据的查询   1,结构化数据的查询     Sql语句,查询结构化数据的方法。简单,速度快。   2.非结构化数据的查询     例如:从文本文件中找出包含spring的单词的文件     1.目测     2.使用程序代码来实现,把文件读取到内存中,匹配字符串,顺序扫描。     3.把结构化数据变成结构化数据       (先根据空格进行字符串拆分,得到一个单词列表,基于单词列表创建一个索引 )          索引:一个为了提高查询速度,创建某种数据结构的集合        然后 查询索引,根据单词和文档对应关系找到文档列表,这个过程就叫全文检索 3.全文检索   先创建索引,然后查询索引的过程,就叫做全文检索。(创建索引时间较长,但是一次创建可以多次使用,平均每次查询的速度就提高了速度) 二,全文搜索的应用场景 1,搜索引擎     百度,360搜索,谷歌,搜狗 2,站内搜索     论坛搜索,微博搜索,文章搜索 3,电商搜索     淘宝搜索,京东搜索 4,只要是有搜索的地方,就可以使用到全文检索技术 三

[Lucene]-Lucene基本概述以及简单实例

我与影子孤独终老i 提交于 2019-12-24 09:27:42
一、Lucene基本介绍: 基本信息:Lucene 是 Apache 软件基金会的一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene 的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。 文件结构:自上而下树形展开,一对多。 索引Index:相当于库或者表。 段Segment:相当于分库或者分表。 文档Document:相当一条数据 ,如小说吞噬星空 域Field:一片文档可以分为多个域,相当于字段,如:小说作者,标题,内容。。。 词元Term:一个域又可以分为多个词元,词元是做引搜索的最小单位,标准分词下得词元是一个个单词和汉字。 正向信息: 索引->段->文档->域->词 反向信息: 词->文档。  二、Lucene全文检索: 1、数据分类: 结构化数据:数据库,固定长度和格式的数据。 半结构化数据:如xml,html,等..。 非结构化数据:长度和格式都不固定的数据,如文本... 2、检索过程:Luncene检索过程可以分为两个部分,一个部分是上图左侧结构化,半结构化,非结构化数据的索引建立过程,另一部分是右侧索引查询过程。 索引过程: 有一系列被索引文件 被索引文件经过语法分析和语言处理形成一系列词(Term)。

搜索引擎框架介绍

一曲冷凌霜 提交于 2019-12-24 01:26:38
原文: 搜索引擎框架介绍 一、搜索引擎基础介绍 二、常见搜索引擎框架介绍与比较 三、参考文章 一、搜索引擎基础介绍 1. 什么是搜索引擎   搜索引擎,通常指的是收集了万维网上几千万到几十亿个 网页 并对网页中的每一个词(即关键词)进行索引,建立 索引数据库 的 全文搜索引擎 。当用户查找某个关键词的时候,所有在页面内容中包含了该关键词的网页都将作为搜索结果被搜出来。再经过复杂的算法进行排序(或者包含商业化的竞价排名、商业推广或者广告)后,这些结果将按照与搜索关键词的相关度高低(或与相关度毫无关系),依次排列。 2. 传统的搜索与搜索引擎对比 2.1 传统做法 (1)文档中使用系统的Find查找 (2)mysql中使用like模糊查询 存在问题: (1)海量数据中不能及时响应,少量数据可以通过传统的MySql建立索引解决 (2)一些无用词不能进行过滤,没法分词 (3)数据量大的话难以拓展 (4)相同的数据难以进行相似度最高的进行排序 2.2 搜索引擎做法 (1)存储非结构化的数据 (2)快速检索和响应我们需要的信息,快-准 (3)进行相关性的排序,过滤等 (4)可以去掉停用词(没有特殊含义的词,比如英文的a,is等,中文: 这,的,是等),框架一般支持可以自定义停用词 二、常见搜索引擎框架介绍与比较 1. Java 全文搜索引擎框架 Lucene 1.1 简介