SlideShare a Scribd company logo
1 of 67
AJAX LUCENE 构建搜索引擎 Roger Xia
Ajax & Lucene ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
AJAX = Asynchronous +  JavaScript  + XML + CSS ,[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript 对象 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
使用 JSON 创建数组和对象图 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript 构造函数 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript -- prototype ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript 对象反射 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Rich Client ,[object Object],[object Object],[object Object],[object Object]
Ajax 技术使用 XMLHTTPRequest 对象发送请求并得到服务器响应,得到返回的数据后用 JavaScript 操作 DOM 来使页面更新
Cascading Style Sheets ,[object Object],[object Object],[object Object],[object Object]
CSS ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
内部样式表 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
外部样式表 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
样式类 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
CSS 中的滤镜 ,[object Object],[object Object],[object Object]
DOM 与 JavaScript ,[object Object],[object Object]
使用 JavaScript 读取 XML 文档 ,[object Object],[object Object]
Ajax 工作流程 ,[object Object],[object Object]
使用 XMLHttpRequest 发送请求的过程
监视 Response 的状态 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ajax 实例 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Google suggest ,[object Object],[object Object],[object Object]
Ajax 的安全问题 ,[object Object],[object Object],[object Object],[object Object],[object Object]
JavaScript 的性能问题(解释型语言) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
搜索引擎架构 --Lucene http://lucene.apache.org/ Roger Xia
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
信息获取 与搜索引擎 ,[object Object],数据 索引 检索 排序 a.   构造文本数据库 ,存放将来需要检索的数据 b.   建立文档的索引 ,用来提高信息检索速度。如,倒排索引技术 c. 利用文本处理技术 分析用户的查询 。在进行查询之前还可以进行一些与处理。 d.   对检索结果进行处理 (排序) DB/File 客户输入查询条件 反馈客户查询结果 信息
信息获取与 搜索引擎 ,[object Object],[object Object],[object Object],第一代搜索引擎:依靠人工分拣的分类目录搜索, e.g. yahoo 第二代搜索引擎:依靠机器抓取,并建立在超级链接分析技术基础之上的网页搜索, e.g. Google 特点:信息量大,更新及时,但返回无关信息过多 ,[object Object],[object Object],[object Object],[object Object]
全文检索 ,[object Object],[object Object],[object Object],[object Object]
全文检索系统 ,[object Object],查询引擎 文本处理引擎 索引引擎 二次开发应用接口 应用程序 Web 程序 其他 磁盘索引文件
全文检索 ≠  like "%keyword%"   ,[object Object],[object Object],[object Object]
Lucene ,[object Object],[object Object],[object Object]
Lucene 全文检索实现机制 ,[object Object],RecordSet :查询结果集,由多个 Record 组成 Hits :查询结果集,由匹配的 Document 组成 2.3 -> TopDocCollector collector = new TopDocCollector(10); Field :字段 Field :字段 Record :记录,包含多个字段 Document :一个需要进行索引的“单元” 一个 Document 由多个字段组成 索引数据源: record(field1,field2...) record(field1..)    SQL: insert/   _____________   | DB  Index  |   -------------   / SQL: select 结果输出: results(record(field1,field2..) record(field1...)) 索引数据源: doc(field1,field2...) doc(field1,field2...)    indexer /   _____________   | Lucene Index|   --------------   / searcher   结果输出: Hits(doc(field1,field2) doc(field1...)) Database Lucene
全文检索 和 数据库应用 最大的 不同 在于: 让最相关的头 100 条结果满足 98% 以上用户的需求 。 没有接口或接口复杂,无法定制 。 通过不同的语言分析接口实现,可以方便的定制出符合应用需要的索引规则(包括对中文的支持) 可定制性  使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 高负载的模糊查询应用,需要复杂的模糊查询规则,索引的资料量比较大 结论 返回所有的结果集,在匹配条目非常多的时候需要大量的内存存放这些临时结果集。  通过特别的算法,将最匹配度最高的头 100 条结果输出,结果集是缓冲式的小批量读取的。  结果输出  没有匹配程度的控制:比如有记录中 net 出现 5 词和出现 1 次的,结果是一样的。  有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。  匹配度  使用: like “%net%”  会把 netherlands 也匹配出来;使用 like "%com%net%" :就不能匹配词序颠倒的 xxx.net..xxx.com  通过词元 (term) 进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持。 匹配效果 对于 LIKE 查询来说,数据传统的索引是根本用不上的。  将数据源中的数据都通过全文索引一一建立反向索引  索引 数据库   Lucene 全文索引
Lucene 的创新之处 ,[object Object],[object Object],[object Object]
索引 与 搜索 ,[object Object],[object Object],[object Object],[object Object],[object Object]
倒排索引 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],1 B kind 1 kind B 1 dog B 1 B animal 1,1 A,B dog 出现次数 出现的文档 单词 倒排索引结构 1 animal B 1 dog A 出现次数 出现单词 文档编号 一般索引结构
Lucene ,[object Object]
建立索引
Lucene 建立索引过程 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene -- Document ,[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene -- IndexWriter ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene -- IndexWriter ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene 的索引文件格式 ,[object Object],[object Object],[object Object]
Lucene 文件格式中定义的数据类型 ,[object Object]
Lucene 索引文件概念结构 Segment :一个段是一个独立的索引,可以由 IndexSearcher 进行单独查找。 Lucene 的工作其实就是不停地往磁盘加入新的 Segment ,并按一定的算法合并不同的 Segment 以创建一个新的段。 项( Term )是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。 域( Field )是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项
Lucene 索引文件结构组成 域集合与项集合中的文件组采用了一种类似的存储办法:一个小型的索引文件,运行时载入内存;一个对应于索引文件的实际信息文件,可以按照索引中指示的偏移量随机访问; 索引文件与信息文件在记录的排列顺序上存在隐式的对应关系,即索引文件中按照“索引项 1 、索引项 2…” 排列,则信息文件则也按照“信息项 1 、信息项 2…” 排列。
一共有四个文件( .tii, .tis,.frq,.prx )用来记录 Term 相关的信息: --  在 .tis 文件中,对每个 Term 都有一项 TermInfo, 而且 TermInfo 是根据字典顺序排序。 TermInfo 中记录的了 Term 本身,以及一些以在 .frq 和 .prx 中和该 Term 相关详细的指针。 -- .tii 是对 .tis 的一个索引,用来加速对 Term 的查找。 -- .frq 文件记录了每个 Term 出现的文档号以及其频率, -- .prx 文件记录了每个 Term 在每篇文档中出现的位置信息。
索引存储抽象  --  索引存放位置 磁盘  –  FSDirectory  将索引存放在文件系统中, Lucene 会自动在内存中建立缓存,然后到一定时候就写入磁盘。 IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true); 内存  –  RAMDirectory ,速度快,非持久化(虚拟机退出,索引丢失),因此需一方法将内存中的索引转入磁盘。 IndexWriter writer = new IndexWriter(RAMDirectory.getDirectory(), new StandardAnalyzer(), true);
索引合并 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene 索引优化、同步机制 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene 搜索 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
检索结果  -- Hits Lazy load result, LRU doubly-linked cache
Lucene 的评分机制 ,[object Object],[object Object],[object Object],[object Object]
构建 Query ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Lucene 分析器 ,[object Object],[object Object],TokenStream Tokenizer TokenFilter
Lucene 内建分析器
高级搜索技巧 ,[object Object],[object Object],[object Object]
对搜索结果的排序 ,[object Object],[object Object],[object Object]
搜索引擎的中文问题 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
中文分词 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
用 lucene 和 Heritrix 构建了一个 Web  搜索应用程序 ,[object Object],[object Object],[object Object]
系统架构 ,[object Object]
DB  全文检索 ,[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践Li JianYe
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2YI-CHING WU
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈Robbin Fan
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Servicesjavatwo2011
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1YI-CHING WU
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) My own sweet home!
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVCjeffz
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big DataKuo-Chun Su
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 AppsEric ShangKuan
 
Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Justin Lin
 

What's hot (14)

ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 
Hibernate教程
Hibernate教程Hibernate教程
Hibernate教程
 
运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践运维系统开发与Rails 3页面开发实践
运维系统开发与Rails 3页面开发实践
 
Elastic stack day-2
Elastic stack day-2Elastic stack day-2
Elastic stack day-2
 
缓存技术浅谈
缓存技术浅谈缓存技术浅谈
缓存技术浅谈
 
用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services用JAX-RS和Jersey完成RESTful Web Services
用JAX-RS和Jersey完成RESTful Web Services
 
Elastic stack day-1
Elastic stack day-1Elastic stack day-1
Elastic stack day-1
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
 
Real World ASP.NET MVC
Real World ASP.NET MVCReal World ASP.NET MVC
Real World ASP.NET MVC
 
Big Java, Big Data
Big Java, Big DataBig Java, Big Data
Big Java, Big Data
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps
 
Storage
StorageStorage
Storage
 
Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤Spring 2.0 技術手冊第十章 - 專案:線上書籤
Spring 2.0 技術手冊第十章 - 專案:線上書籤
 

Viewers also liked

Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukRoger Xia
 
构建高效能的Web网站 精选版-by-infoq
构建高效能的Web网站 精选版-by-infoq构建高效能的Web网站 精选版-by-infoq
构建高效能的Web网站 精选版-by-infoqRoger Xia
 
Mongo db实战
Mongo db实战Mongo db实战
Mongo db实战Roger Xia
 
Consistency-New-Generation-Databases
Consistency-New-Generation-DatabasesConsistency-New-Generation-Databases
Consistency-New-Generation-DatabasesRoger Xia
 
机器学习推动金融数据智能
机器学习推动金融数据智能机器学习推动金融数据智能
机器学习推动金融数据智能Roger Xia
 

Viewers also liked (6)

Q con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancoukQ con london2011-matthewwall-whyichosemongodbforguardiancouk
Q con london2011-matthewwall-whyichosemongodbforguardiancouk
 
构建高效能的Web网站 精选版-by-infoq
构建高效能的Web网站 精选版-by-infoq构建高效能的Web网站 精选版-by-infoq
构建高效能的Web网站 精选版-by-infoq
 
Mongo db实战
Mongo db实战Mongo db实战
Mongo db实战
 
JavaEE6
JavaEE6JavaEE6
JavaEE6
 
Consistency-New-Generation-Databases
Consistency-New-Generation-DatabasesConsistency-New-Generation-Databases
Consistency-New-Generation-Databases
 
机器学习推动金融数据智能
机器学习推动金融数据智能机器学习推动金融数据智能
机器学习推动金融数据智能
 

Similar to Ajax Lucence

網站設計100步
網站設計100步網站設計100步
網站設計100步evercislide
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程yiditushe
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用yiditushe
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianJackson Tian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introductionmysqlops
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plusDongxu Yao
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介Allen Lsy
 
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - LuceneJava 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene建興 王
 
Kid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionKid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionFrank S.C. Tseng
 
【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Actiontbosstraining
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressAppzhoujg
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事Yihua Huang
 
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)Shanda innovation institute
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4Cat Chen
 

Similar to Ajax Lucence (20)

網站設計100步
網站設計100步網站設計100步
網站設計100步
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Exodus2 大局观
Exodus2 大局观Exodus2 大局观
Exodus2 大局观
 
Berserk js
Berserk jsBerserk js
Berserk js
 
Js培训
Js培训Js培训
Js培训
 
J S教材
J S教材J S教材
J S教材
 
通过Struts构建Web应用
通过Struts构建Web应用通过Struts构建Web应用
通过Struts构建Web应用
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introduction
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Java 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - LuceneJava 的開放原碼全文搜尋技術 - Lucene
Java 的開放原碼全文搜尋技術 - Lucene
 
Kid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese VersionKid171 chap03 traditional Chinese Version
Kid171 chap03 traditional Chinese Version
 
敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3敦群學院-SharePoint精英計畫-系統開發-Day 3
敦群學院-SharePoint精英計畫-系統開發-Day 3
 
【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action【第一季•第六期】Ajax & JSONP in Action
【第一季•第六期】Ajax & JSONP in Action
 
信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp信息系统开发平台OpenExpressApp
信息系统开发平台OpenExpressApp
 
Web爬虫那点事
Web爬虫那点事Web爬虫那点事
Web爬虫那点事
 
Flex开发实践经验谈(谢敏)
Flex开发实践经验谈(谢敏)Flex开发实践经验谈(谢敏)
Flex开发实践经验谈(谢敏)
 
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
[Flash开发者交流][2010.05.30]flex开发实践经验谈(谢敏)
 
建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 

More from Roger Xia

Code reviews
Code reviewsCode reviews
Code reviewsRoger Xia
 
Python introduction
Python introductionPython introduction
Python introductionRoger Xia
 
Learning notes ruby
Learning notes rubyLearning notes ruby
Learning notes rubyRoger Xia
 
Converged open platform for enterprise
Converged open platform for enterpriseConverged open platform for enterprise
Converged open platform for enterpriseRoger Xia
 
Code reviews
Code reviewsCode reviews
Code reviewsRoger Xia
 
E commerce search strategies
E commerce search strategiesE commerce search strategies
E commerce search strategiesRoger Xia
 
Indefero source code_managment
Indefero source code_managmentIndefero source code_managment
Indefero source code_managmentRoger Xia
 
Web Services Atomic Transactio
 Web Services Atomic Transactio Web Services Atomic Transactio
Web Services Atomic TransactioRoger Xia
 
Web service through cxf
Web service through cxfWeb service through cxf
Web service through cxfRoger Xia
 
Spring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataSpring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataRoger Xia
 
Java explore
Java exploreJava explore
Java exploreRoger Xia
 
Ca siteminder
Ca siteminderCa siteminder
Ca siteminderRoger Xia
 
Fixing twitter
Fixing twitterFixing twitter
Fixing twitterRoger Xia
 
Eclipse plug in mylyn & tasktop
Eclipse plug in mylyn & tasktopEclipse plug in mylyn & tasktop
Eclipse plug in mylyn & tasktopRoger Xia
 
新浪微博架构猜想
新浪微博架构猜想新浪微博架构猜想
新浪微博架构猜想Roger Xia
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools researchRoger Xia
 
Secure Multi Tenancy In the Cloud
Secure Multi Tenancy In the CloudSecure Multi Tenancy In the Cloud
Secure Multi Tenancy In the CloudRoger Xia
 
Java programing considering performance
Java programing considering performanceJava programing considering performance
Java programing considering performanceRoger Xia
 

More from Roger Xia (20)

Code reviews
Code reviewsCode reviews
Code reviews
 
Python introduction
Python introductionPython introduction
Python introduction
 
Learning notes ruby
Learning notes rubyLearning notes ruby
Learning notes ruby
 
Converged open platform for enterprise
Converged open platform for enterpriseConverged open platform for enterprise
Converged open platform for enterprise
 
Code reviews
Code reviewsCode reviews
Code reviews
 
E commerce search strategies
E commerce search strategiesE commerce search strategies
E commerce search strategies
 
Saml
SamlSaml
Saml
 
Indefero source code_managment
Indefero source code_managmentIndefero source code_managment
Indefero source code_managment
 
Web Services Atomic Transactio
 Web Services Atomic Transactio Web Services Atomic Transactio
Web Services Atomic Transactio
 
Web service through cxf
Web service through cxfWeb service through cxf
Web service through cxf
 
Spring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataSpring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_data
 
Java explore
Java exploreJava explore
Java explore
 
Ca siteminder
Ca siteminderCa siteminder
Ca siteminder
 
Fixing twitter
Fixing twitterFixing twitter
Fixing twitter
 
Eclipse plug in mylyn & tasktop
Eclipse plug in mylyn & tasktopEclipse plug in mylyn & tasktop
Eclipse plug in mylyn & tasktop
 
新浪微博架构猜想
新浪微博架构猜想新浪微博架构猜想
新浪微博架构猜想
 
Jenkins
JenkinsJenkins
Jenkins
 
MDD and modeling tools research
MDD and modeling tools researchMDD and modeling tools research
MDD and modeling tools research
 
Secure Multi Tenancy In the Cloud
Secure Multi Tenancy In the CloudSecure Multi Tenancy In the Cloud
Secure Multi Tenancy In the Cloud
 
Java programing considering performance
Java programing considering performanceJava programing considering performance
Java programing considering performance
 

Ajax Lucence

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. Ajax 技术使用 XMLHTTPRequest 对象发送请求并得到服务器响应,得到返回的数据后用 JavaScript 操作 DOM 来使页面更新
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36. 全文检索 和 数据库应用 最大的 不同 在于: 让最相关的头 100 条结果满足 98% 以上用户的需求 。 没有接口或接口复杂,无法定制 。 通过不同的语言分析接口实现,可以方便的定制出符合应用需要的索引规则(包括对中文的支持) 可定制性 使用率低,模糊匹配规则简单或者需要模糊查询的资料量少 高负载的模糊查询应用,需要复杂的模糊查询规则,索引的资料量比较大 结论 返回所有的结果集,在匹配条目非常多的时候需要大量的内存存放这些临时结果集。 通过特别的算法,将最匹配度最高的头 100 条结果输出,结果集是缓冲式的小批量读取的。 结果输出 没有匹配程度的控制:比如有记录中 net 出现 5 词和出现 1 次的,结果是一样的。 有匹配度算法,将匹配程度(相似度)比较高的结果排在前面。 匹配度 使用: like “%net%” 会把 netherlands 也匹配出来;使用 like "%com%net%" :就不能匹配词序颠倒的 xxx.net..xxx.com 通过词元 (term) 进行匹配,通过语言分析接口的实现,可以实现对中文等非英语的支持。 匹配效果 对于 LIKE 查询来说,数据传统的索引是根本用不上的。 将数据源中的数据都通过全文索引一一建立反向索引 索引 数据库 Lucene 全文索引
  • 37.
  • 38.
  • 39.
  • 40.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48. Lucene 索引文件概念结构 Segment :一个段是一个独立的索引,可以由 IndexSearcher 进行单独查找。 Lucene 的工作其实就是不停地往磁盘加入新的 Segment ,并按一定的算法合并不同的 Segment 以创建一个新的段。 项( Term )是最小的索引概念单位,它直接代表了一个字符串以及其在文件中的位置、出现次数等信息。 域( Field )是一个关联的元组,由一个域名和一个域值组成,域名是一个字串,域值是一个项
  • 49. Lucene 索引文件结构组成 域集合与项集合中的文件组采用了一种类似的存储办法:一个小型的索引文件,运行时载入内存;一个对应于索引文件的实际信息文件,可以按照索引中指示的偏移量随机访问; 索引文件与信息文件在记录的排列顺序上存在隐式的对应关系,即索引文件中按照“索引项 1 、索引项 2…” 排列,则信息文件则也按照“信息项 1 、信息项 2…” 排列。
  • 50. 一共有四个文件( .tii, .tis,.frq,.prx )用来记录 Term 相关的信息: -- 在 .tis 文件中,对每个 Term 都有一项 TermInfo, 而且 TermInfo 是根据字典顺序排序。 TermInfo 中记录的了 Term 本身,以及一些以在 .frq 和 .prx 中和该 Term 相关详细的指针。 -- .tii 是对 .tis 的一个索引,用来加速对 Term 的查找。 -- .frq 文件记录了每个 Term 出现的文档号以及其频率, -- .prx 文件记录了每个 Term 在每篇文档中出现的位置信息。
  • 51. 索引存储抽象 -- 索引存放位置 磁盘 – FSDirectory 将索引存放在文件系统中, Lucene 会自动在内存中建立缓存,然后到一定时候就写入磁盘。 IndexWriter writer = new IndexWriter(FSDirectory.getDirectory(path, true), new StandardAnalyzer(), true); 内存 – RAMDirectory ,速度快,非持久化(虚拟机退出,索引丢失),因此需一方法将内存中的索引转入磁盘。 IndexWriter writer = new IndexWriter(RAMDirectory.getDirectory(), new StandardAnalyzer(), true);
  • 52.
  • 53.
  • 54.
  • 55. 检索结果 -- Hits Lazy load result, LRU doubly-linked cache
  • 56.
  • 57.
  • 58.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.