- 浏览: 7339663 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
2006 年 9 月 06 日
Lucene 是基于 Java 的全文信息检索包,它目前是 Apache Jakarta 家族下面的一个开源项目。在这篇文章中,我们首先来看如何利用 Lucene 实现高级搜索功能,然后学习如何利用 Lucene 来创建一个健壮的 Web 搜索应用程序。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
在本篇文章中,你会学习到如何利用 Lucene 实现高级搜索功能以及如何利用 Lucene 来创建 Web 搜索应用程序。通过这些学习,你就可以利用 Lucene 来创建自己的搜索应用程序。
通常一个 Web 搜索引擎的架构分为前端和后端两部分,就像图一中所示。在前端流程中,用户在搜索引擎提供的界面中输入要搜索的关键词,这里提到的用户界面一般是一个带有输入框的 Web 页面,然后应用程序将搜索的关键词解析成搜索引擎可以理解的形式,并在索引文件上进行搜索操作。在排序后,搜索引擎返回搜索结果给用户。在后端流程中,网络爬虫或者机器人从因特网上获取 Web 页面,然后索引子系统解析这些 Web 页面并存入索引文件中。如果你想利用 Lucene 来创建一个 Web 搜索应用程序,那么它的架构也和上面所描述的类似,就如图一中所示。
Lucene 支持多种形式的高级搜索,我们在这一部分中会进行探讨,然后我会使用 Lucene 的 API 来演示如何实现这些高级搜索功能。
大多数的搜索引擎都会提供布尔操作符让用户可以组合查询,典型的布尔操作符有 AND, OR, NOT。Lucene 支持 5 种布尔操作符,分别是 AND, OR, NOT, 加(+), 减(-)。接下来我会讲述每个操作符的用法。
- OR: 如果你要搜索含有字符 A 或者 B 的文档,那么就需要使用 OR 操作符。需要记住的是,如果你只是简单的用空格将两个关键词分割开,其实在搜索的时候搜索引擎会自动在两个关键词之间加上 OR 操作符。例如,“Java OR Lucene” 和 “Java Lucene” 都是搜索含有 Java 或者含有 Lucene 的文档。
- AND: 如果你需要搜索包含一个以上关键词的文档,那么就需要使用 AND 操作符。例如,“Java AND Lucene” 返回所有既包含 Java 又包含 Lucene 的文档。
- NOT: Not 操作符使得包含紧跟在 NOT 后面的关键词的文档不会被返回。例如,如果你想搜索所有含有 Java 但不含有 Lucene 的文档,你可以使用查询语句 “Java NOT Lucene”。但是你不能只对一个搜索词使用这个操作符,比如,查询语句 “NOT Java” 不会返回任何结果。
- 加号(+): 这个操作符的作用和 AND 差不多,但它只对紧跟着它的一个搜索词起作用。例如,如果你想搜索一定包含 Java,但不一定包含 Lucene 的文档,就可以使用查询语句“+Java Lucene”。
- 减号(-): 这个操作符的功能和 NOT 一样,查询语句 “Java -Lucene” 返回所有包含 Java 但不包含 Lucene 的文档。
接下来我们看一下如何利用 Lucene 提供的 API 来实现布尔查询。清单1 显示了如果利用布尔操作符进行查询的过程。
//Test boolean operator public void testOperator(String indexDirectory) throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); String[] searchWords = {"Java AND Lucene", "Java NOT Lucene", "Java OR Lucene", "+Java +Lucene", "+Java -Lucene"}; Analyzer language = new StandardAnalyzer(); Query query; for(int i = 0; i < searchWords.length; i++){ query = QueryParser.parse(searchWords[i], "title", language); Hits results = indexSearcher.search(query); System.out.println(results.length() + "search results for query " + searchWords[i]); } } |
Lucene 支持域搜索,你可以指定一次查询是在哪些域(Field)上进行。例如,如果索引的文档包含两个域,Title
和 Content
,你就可以使用查询 “Title: Lucene AND Content: Java” 来返回所有在 Title 域上包含 Lucene 并且在 Content 域上包含 Java 的文档。清单 2 显示了如何利用 Lucene 的 API 来实现域搜索。
//Test field search public void testFieldSearch(String indexDirectory) throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); String searchWords = "title:Lucene AND content:Java"; Analyzer language = new StandardAnalyzer(); Query query = QueryParser.parse(searchWords, "title", language); Hits results = indexSearcher.search(query); System.out.println(results.length() + "search results for query " + searchWords); } |
Lucene 支持两种通配符:问号(?)和星号(*)。你可以使用问号(?)来进行单字符的通配符查询,或者利用星号(*)进行多字符的通配符查询。例如,如果你想搜索 tiny 或者 tony,你就可以使用查询语句 “t?ny”;如果你想查询 Teach, Teacher 和 Teaching,你就可以使用查询语句 “Teach*”。清单3 显示了通配符查询的过程。
//Test wildcard search public void testWildcardSearch(String indexDirectory)throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); String[] searchWords = {"tex*", "tex?", "?ex*"}; Query query; for(int i = 0; i < searchWords.length; i++){ query = new WildcardQuery(new Term("title",searchWords[i])); Hits results = indexSearcher.search(query); System.out.println(results.length() + "search results for query " + searchWords[i]); } } |
Lucene 提供的模糊查询基于编辑距离算法(Edit distance algorithm)。你可以在搜索词的尾部加上字符 ~ 来进行模糊查询。例如,查询语句 “think~” 返回所有包含和 think 类似的关键词的文档。清单 4 显示了如果利用 Lucene 的 API 进行模糊查询的代码。
//Test fuzzy search public void testFuzzySearch(String indexDirectory)throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); String[] searchWords = {"text", "funny"}; Query query; for(int i = 0; i < searchWords.length; i++){ query = new FuzzyQuery(new Term("title",searchWords[i])); Hits results = indexSearcher.search(query); System.out.println(results.length() + "search results for query " + searchWords[i]); } } |
范围搜索匹配某个域上的值在一定范围的文档。例如,查询 “age:[18 TO 35]” 返回所有 age 域上的值在 18 到 35 之间的文档。清单5显示了利用 Lucene 的 API 进行返回搜索的过程。
//Test range search public void testRangeSearch(String indexDirectory)throws Exception{ Directory dir = FSDirectory.getDirectory(indexDirectory,false); IndexSearcher indexSearcher = new IndexSearcher(dir); Term begin = new Term("birthDay","20000101"); Term end = new Term("birthDay","20060606"); Query query = new RangeQuery(begin,end,true); Hits results = indexSearcher.search(query); System.out.println(results.length() + "search results is returned"); } |
|
|
接下来我们开发一个 Web 应用程序利用 Lucene 来检索存放在文件服务器上的 HTML 文档。在开始之前,需要准备如下环境:
- Eclipse 集成开发环境
- Tomcat 5.0
- Lucene Library
- JDK 1.5
这个例子使用 Eclipse 进行 Web 应用程序的开发,最终这个 Web 应用程序跑在 Tomcat 5.0 上面。在准备好开发所必需的环境之后,我们接下来进行 Web 应用程序的开发。
- 在 Eclipse 里面,选择 File > New > Project,然后再弹出的窗口中选择动态 Web 项目,如图二所示。
- 在创建好动态 Web 项目之后,你会看到创建好的项目的结构,如图三所示,项目的名称为 sample.dw.paper.lucene。
在我们的设计中,把该系统分成如下四个子系统:
- 用户接口: 这个子系统提供用户界面使用户可以向 Web 应用程序服务器提交搜索请求,然后搜索结果通过用户接口来显示出来。我们用一个名为 search.jsp 的页面来实现该子系统。
- 请求管理器: 这个子系统管理从客户端发送过来的搜索请求并把搜索请求分发到搜索子系统中。最后搜索结果从搜索子系统返回并最终发送到用户接口子系统。我们使用一个 Servlet 来实现这个子系统。
- 搜索子系统: 这个子系统负责在索引文件上进行搜索并把搜索结构传递给请求管理器。我们使用 Lucene 提供的 API 来实现该子系统。
- 索引子系统: 这个子系统用来为 HTML 页面来创建索引。我们使用 Lucene 的 API 以及 Lucene 提供的一个 HTML 解析器来创建该子系统。
图4 显示了我们设计的详细信息,我们将用户接口子系统放到 webContent 目录下面。你会看到一个名为 search.jsp 的页面在这个文件夹里面。请求管理子系统在包 sample.dw.paper.lucene.servlet
下面,类 SearchController
负责功能的实现。搜索子系统放在包 sample.dw.paper.lucene.search
当中,它包含了两个类,SearchManager
和 SearchResultBean
,第一个类用来实现搜索功能,第二个类用来描述搜索结果的结构。索引子系统放在包 sample.dw.paper.lucene.index
当中。类 IndexManager
负责为 HTML 文件创建索引。该子系统利用包 sample.dw.paper.lucene.util
里面的类 HTMLDocParser
提供的方法 getTitle
和 getContent
来对 HTML 页面进行解析。
在分析了系统的架构设计之后,我们接下来看系统实现的详细信息。
- 用户接口: 这个子系统有一个名为 search.jsp 的 JSP 文件来实现,这个 JSP 页面包含两个部分。第一部分提供了一个用户接口去向 Web 应用程序服务器提交搜索请求,如图5所示。注意到这里的搜索请求发送到了一个名为 SearchController 的 Servlet 上面。Servlet 的名字和具体实现的类的对应关系在 web.xml 里面指定。
这个JSP的第二部分负责显示搜索结果给用户,如图6所示:
-
请求管理器: 一个名为
SearchController
的 servlet 用来实现该子系统。清单6给出了这个类的源代码。
package sample.dw.paper.lucene.servlet; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sample.dw.paper.lucene.search.SearchManager; /** * This servlet is used to deal with the search request * and return the search results to the client */ public class SearchController extends HttpServlet{ private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ String searchWord = request.getParameter("searchWord"); SearchManager searchManager = new SearchManager(searchWord); List searchResult = null; searchResult = searchManager.search(); RequestDispatcher dispatcher = request.getRequestDispatcher("search.jsp"); request.setAttribute("searchResult",searchResult); dispatcher.forward(request, response); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ doPost(request, response); } } |
在清单6中,doPost
方法从客户端获取搜索词并创建类 SearchManager
的一个实例,其中类 SearchManager
在搜索子系统中进行了定义。然后,SearchManager
的方法 search 会被调用。最后搜索结果被返回到客户端。
-
搜索子系统: 在这个子系统中,我们定义了两个类:
SearchManager
和SearchResultBean
。第一个类用来实现搜索功能,第二个类是个JavaBean,用来描述搜索结果的结构。清单7给出了类SearchManager
的源代码。
package sample.dw.paper.lucene.search; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.Hits; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import sample.dw.paper.lucene.index.IndexManager; /** * This class is used to search the * Lucene index and return search results */ public class SearchManager { private String searchWord; private IndexManager indexManager; private Analyzer analyzer; public SearchManager(String searchWord){ this.searchWord = searchWord; this.indexManager = new IndexManager(); this.analyzer = new StandardAnalyzer(); } /** * do search */ public List search(){ List searchResult = new ArrayList(); if(false == indexManager.ifIndexExist()){ try { if(false == indexManager.createIndex()){ return searchResult; } } catch (IOException e) { e.printStackTrace(); return searchResult; } } IndexSearcher indexSearcher = null; try{ indexSearcher = new IndexSearcher(indexManager.getIndexDir()); }catch(IOException ioe){ ioe.printStackTrace(); } QueryParser queryParser = new QueryParser("content",analyzer); Query query = null; try { query = queryParser.parse(searchWord); } catch (ParseException e) { e.printStackTrace(); } if(null != query >> null != indexSearcher){ try { Hits hits = indexSearcher.search(query); for(int i = 0; i < hits.length(); i ++){ SearchResultBean resultBean = new SearchResultBean(); resultBean.setHtmlPath(hits.doc(i).get("path")); resultBean.setHtmlTitle(hits.doc(i).get("title")); searchResult.add(resultBean); } } catch (IOException e) { e.printStackTrace(); } } return searchResult; } } |
在清单7中,注意到在这个类里面有三个私有属性。第一个是 searchWord
,代表了来自客户端的搜索词。第二个是 indexManager
,代表了在索引子系统中定义的类 IndexManager
的一个实例。第三个是 analyzer
,代表了用来解析搜索词的解析器。现在我们把注意力放在方法 search
上面。这个方法首先检查索引文件是否已经存在,如果已经存在,那么就在已经存在的索引上进行检索,如果不存在,那么首先调用类 IndexManager
提供的方法来创建索引,然后在新创建的索引上进行检索。搜索结果返回后,这个方法从搜索结果中提取出需要的属性并为每个搜索结果生成类 SearchResultBean
的一个实例。最后这些 SearchResultBean
的实例被放到一个列表里面并返回给请求管理器。
在类 SearchResultBean
中,含有两个属性,分别是 htmlPath
和 htmlTitle
,以及这个两个属性的 get 和 set 方法。这也意味着我们的搜索结果包含两个属性:htmlPath
和 htmlTitle
,其中 htmlPath
代表了 HTML 文件的路径,htmlTitle
代表了 HTML 文件的标题。
-
索引子系统: 类
IndexManager
用来实现这个子系统。清单8 给出了这个类的源代码。
package sample.dw.paper.lucene.index; import java.io.File; import java.io.IOException; import java.io.Reader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import sample.dw.paper.lucene.util.HTMLDocParser; /** * This class is used to create an index for HTML files * */ public class IndexManager { //the directory that stores HTML files private final String dataDir = "c:\\dataDir"; //the directory that is used to store a Lucene index private final String indexDir = "c:\\indexDir"; /** * create index */ public boolean createIndex() throws IOException{ if(true == ifIndexExist()){ return true; } File dir = new File(dataDir); if(!dir.exists()){ return false; } File[] htmls = dir.listFiles(); Directory fsDirectory = FSDirectory.getDirectory(indexDir, true); Analyzer analyzer = new StandardAnalyzer(); IndexWriter indexWriter = new IndexWriter(fsDirectory, analyzer, true); for(int i = 0; i < htmls.length; i++){ String htmlPath = htmls[i].getAbsolutePath(); if(htmlPath.endsWith(".html") || htmlPath.endsWith(".htm")){ addDocument(htmlPath, indexWriter); } } indexWriter.optimize(); indexWriter.close(); return true; } /** * Add one document to the Lucene index */ public void addDocument(String htmlPath, IndexWriter indexWriter){ HTMLDocParser htmlParser = new HTMLDocParser(htmlPath); String path = htmlParser.getPath(); String title = htmlParser.getTitle(); Reader content = htmlParser.getContent(); Document document = new Document(); document.add(new Field("path",path,Field.Store.YES,Field.Index.NO)); document.add(new Field("title",title,Field.Store.YES,Field.Index.TOKENIZED)); document.add(new Field("content",content)); try { indexWriter.addDocument(document); } catch (IOException e) { e.printStackTrace(); } } /** * judge if the index exists already */ public boolean ifIndexExist(){ File directory = new File(indexDir); if(0 < directory.listFiles().length){ return true; }else{ return false; } } public String getDataDir(){ return this.dataDir; } public String getIndexDir(){ return this.indexDir; } } |
这个类包含两个私有属性,分别是 dataDir
和 indexDir
。dataDir
代表存放等待进行索引的 HTML 页面的路径,indexDir
代表了存放 Lucene 索引文件的路径。类 IndexManager
提供了三个方法,分别是 createIndex
, addDocument
和 ifIndexExist
。如果索引不存在的话,你可以使用方法 createIndex
去创建一个新的索引,用方法 addDocument
去向一个索引上添加文档。在我们的场景中,一个文档就是一个 HTML 页面。方法 addDocument
会调用由类 HTMLDocParser
提供的方法对 HTML 文档进行解析。你可以使用最后一个方法 ifIndexExist
来判断 Lucene 的索引是否已经存在。
现在我们来看一下放在包 sample.dw.paper.lucene.util
里面的类 HTMLDocParser
。这个类用来从 HTML 文件中提取出文本信息。这个类包含三个方法,分别是 getContent
,getTitle
和 getPath
。第一个方法返回去除了 HTML 标记的文本内容,第二个方法返回 HTML 文件的标题,最后一个方法返回 HTML 文件的路径。清单9 给出了这个类的源代码。
package sample.dw.paper.lucene.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; import org.apache.lucene.demo.html.HTMLParser; public class HTMLDocParser { private String htmlPath; private HTMLParser htmlParser; public HTMLDocParser(String htmlPath){ this.htmlPath = htmlPath; initHtmlParser(); } private void initHtmlParser(){ InputStream inputStream = null; try { inputStream = new FileInputStream(htmlPath); } catch (FileNotFoundException e) { e.printStackTrace(); } if(null != inputStream){ try { htmlParser = new HTMLParser(new InputStreamReader(inputStream, "utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } public String getTitle(){ if(null != htmlParser){ try { return htmlParser.getTitle(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } return ""; } public Reader getContent(){ if(null != htmlParser){ try { return htmlParser.getReader(); } catch (IOException e) { e.printStackTrace(); } } return null; } public String getPath(){ return this.htmlPath; } } |
现在我们可以在 Tomcat 5.0 上运行开发好的应用程序。
- 右键单击 search.jsp,然后选择 Run as > Run on Server,如图7所示。
- 在弹出的窗口中,选择 Tomcat v5.0 Server 作为目标 Web 应用程序服务器,然后点击 Next,如图8 所示:
- 现在需要指定用来运行 Web 应用程序的 Apache Tomcat 5.0 以及 JRE 的路径。这里你所选择的 JRE 的版本必须和你用来编译 Java 文件的 JRE 的版本一致。配置好之后,点击 Finish。如 图9 所示。
- 配置好之后,Tomcat 会自动运行,并且会对 search.jsp 进行编译并显示给用户。如 图10 所示。
- 在输入框中输入关键词 “information” 然后单击 Search 按钮。然后这个页面上会显示出搜索结果来,如 图11 所示。
- 单击搜索结果的第一个链接,页面上就会显示出所链接到的页面的内容。如 图12 所示.
现在我们已经成功的完成了示例项目的开发,并成功的用Lucene实现了搜索和索引功能。你可以下载这个项目的源代码(下载)。
|
|
Lucene 提供了灵活的接口使我们更加方便的设计我们的 Web 搜索应用程序。如果你想在你的应用程序中加入搜索功能,那么 Lucene 是一个很好的选择。在设计你的下一个带有搜索功能的应用程序的时候可以考虑使用 Lucene 来提供搜索功能。
|
|
wa-lucene2_source_code.zip | 504KB | HTTP |
关于下载方法的信息 |
学习
- 您可以参阅本文在 developerWorks 全球站点上的 英文原文 。
-
Parsing, indexing, and searching XML with Digester and Lucene 是 Otis Gospodnetic 在 developerWorks 上发表的一篇关于利用 Lucene 和 Digester 来操作 XML 文档的文章。
-
实战 Lucene:初识 Lucene 是周登朋在 developerWorks 上发表的一篇介绍 Lucene 的一些基本概念的文章。
-
深入 Lucene 索引机制 是周登朋在 developerWorks 上发表的一篇探讨 Lucene 的索引机制的文章。
-
IBM Search and Index APIs (SIAPI) for WebSphere Information Integrator OmniFind Edition 是 Srinivas Varma Chitiveli 在 developerWorks 上发表的一篇关于如何用 SIAPI 来构建搜索解决方案的文章。
-
Lucene 的官方网站: 上面有大量的 Lucene 帮助文档。
-
现代信息检索 是由 Ricardo Baeza-Yates 和 Berthier Ribeiro-Neto 所写的关于信息检索方面的一本著作。
-
Apache Tomcat 的官方网站: 提供 Tomcat 的下载以及学习资料。
-
Eclipse 的官方网站: 上面提供 Eclipse 的下载并且有很多学习资料。
-
一个关于 Lucene 的演讲: 是由 Lucene 最初的作者 Doug Cutting 在 Pisa 大学所作。
- developerWorks Web Architecture 专区: 上面有很多关于如何构建网站的技术文章。
获得产品和技术
-
Lucene: 下载 Lucene 最新版本。
-
Tomcat: 下载 Tomcat 最新版本。
-
Eclipse: 下载 Eclipse 最新版本。
- : 从 developerWorks 上 免费软件下载和学习资源
发表评论
-
Lucene全文搜索框架
2009-11-09 17:16 36161 lucene简介 1.1 什么是luc ... -
compass的开发應用JPA+Compass整合
2009-10-10 17:21 2505查询结果的高亮显示: 采用的是JPA的注解方式, 首 ... -
Compass 實用中扩展應用
2009-10-10 14:12 29301 Compass中的操作通过CompassSession我 ... -
Spring ,JPA,Compass使用注解开发的博客站内搜索
2009-10-10 12:54 3923当一个网 ... -
Web搜索引擎技术
2009-09-25 13:38 2662一、Web搜索引擎技术综 ... -
搜索引擎技术原理
2009-09-25 13:37 2640一、搜索引擎的分类 ... -
搜索计算的规则
2009-05-15 10:28 2191面向Web应用的网页预处理2003年12月3日(讲稿由张志刚协 ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-05-02 09:18 20372006 年 9 月 06 日 Lucene 是基于 Jav ... -
搜索引擎基本工作原理
2009-05-02 07:48 2056搜索引擎基本工作原理 了解搜索引擎的工作原理对我们 ... -
搜索引擎蜘蛛工作原理
2009-05-02 07:46 2586网站能在搜索引擎被搜 ... -
luence学习的指南文档(五)
2009-03-17 17:00 26696.搜索引擎的性能考虑信息: 索引数字:针对数字的检索 ... -
luence学习的指南文档(三)
2009-03-17 16:58 22723. 使用场合:多个搜索引擎查询的数据结果的合并信息操作:添 ... -
luence学习的指南文档
2009-03-17 16:56 29772.代码使用场合:在搜索引擎检索索引目录的中的信息 /** ... -
luence学习的指南文档
2009-03-17 16:54 2226搜索引擎学习总结(实战和使用场合) 备注以下代码使用的环境为 ... -
揭开神秘面纱,搜索引擎原理浅析
2009-03-17 16:10 1927在浩如烟海的Internet上,特别是其上的Web(World ... -
lucene全文检索应用示例及代码简析
2009-03-17 16:02 2142Lucene是apache软件基金会 jakarta项目组 ... -
关于lucene的学习笔记liui :转关于luncene 内层的研究
2009-03-17 15:59 2422现在已经不用去研究那些代码,但还是分享出来给大家以帮助。谢谢1 ... -
lucene大数据量的动态更新问题解决方式. 用内存
2009-03-17 15:55 4680问题: 目前索引里面已经有1000多万的数据了,现在需要每几分 ... -
lucene 自定义SORT
2009-03-17 15:54 3237如欲转载,请注明作者 ... -
限制lucene的遍历结果.
2009-03-17 15:54 2816Lucene Hack之通过缩小搜索结果集来提升性能 作者:c ...
相关推荐
本文将深入探讨一个名为“lucene_web”的项目,它是基于Lucene实现的一个Web应用程序实例,旨在帮助开发者更好地理解和运用Lucene进行Web开发。 首先,我们要明白Lucene的核心功能。Lucene提供了一套完整的搜索索引...
2. **Web应用集成**:在Web环境中使用Lucene,通常意味着将Lucene的索引和搜索功能集成到一个Web应用程序中,如基于Servlet或Spring Boot的应用。这可能涉及到在HTTP请求处理中构建查询、解析用户输入、执行搜索、...
- **相关资源**:有许多关于Lucene和Solr的技术文章和教程,如“用Lucene加速Web搜索应用程序的开发”。 #### 五、结语 Solr作为一款基于Lucene的企业级搜索服务器,不仅提供了丰富的功能和优秀的性能,还拥有强大...
**Lucee**,全称为Lucee Server,是一个基于Java平台的动态脚本和标记语言,遵循JSR-223标准,专为高效Web应用程序开发设计。它旨在简化和加速开发过程,同时提供了丰富的功能集,使开发者能够轻松处理常见的Web开发...
尽管Lucene本身不是一个现成的应用程序,但它提供了一套丰富的API,使得开发者能够轻松地将搜索功能集成到他们的软件产品或服务中。 **作者与历史**: - **作者**:Lucene最初由Doug Cutting创建。Cutting是一位...
作为一个工具包,Lucene并不直接提供一个完整的全文搜索引擎应用,而是为开发者提供了一系列接口和类,使开发者能够轻松地将全文检索功能集成到自己的应用程序中。这使得Lucene适用于各种规模的项目,从小型应用到...
Lucene是一个基于Java的全文检索引擎工具包,旨在为各种规模的应用程序提供强大的文本搜索功能。该工具包由Doug Cutting创建,他是全文检索领域的资深专家,曾参与开发V-Twin搜索引擎并曾在Excite担任高级系统架构师...
- **章节概述**:探讨如何将Lucene集成到现有的应用程序中,实现高效的搜索功能。 - **知识点详解**: - **搜索API**:介绍Lucene提供的搜索接口及其实现方式。 - **查询语言**:学习使用查询语言构造复杂的搜索...
7. **WEB-INF**:此目录是Java Web应用程序的标准组成部分,其中包含了web.xml配置文件,定义了Web应用的结构和行为,还有可能包含Lucene相关的Java类和库文件。 在深入学习Lucene时,你需要理解以下几个核心概念:...
- 该项目可能使用Spring Boot或者Struts2等框架,简化Web应用的开发。 - MVC(Model-View-Controller)模式:模型处理业务逻辑,视图展示结果,控制器接收和转发请求。 5. **前端技术**: - ...
他创建Lucene的初衷是为了简化和加速全文检索功能的实现,使开发者可以专注于构建应用程序本身,而不是从头开始构建复杂的检索系统。 **2. 全文检索与数据库索引的比较** Lucene的索引机制与传统数据库的索引有所...
Lucene,由Apache Software Foundation维护,是业界广泛使用的全文搜索引擎库,它允许开发者在自己的应用程序中实现高效的文本检索功能。而将Lucene与Web服务结合,使得跨平台、跨语言的搜索应用成为可能。 **一、...
- **Lucene搜索引擎**:为Web应用提供高效的全文搜索功能。 - **Scaffold工具包**:简化了数据展示和表单处理的过程。 - **Struts验证器**:提供了一套强大的验证规则和错误处理机制。 - **Tiles标签库**:帮助管理...
在实际开发中,.NET开发者可能会使用如Lucene.NET这样的开源搜索引擎库来加速开发进程,它提供了一些核心的搜索引擎功能,如索引和查询。同时,对于大规模的搜索引擎,还需要考虑分布式系统的设计,如分布式爬虫、...
5. **搜索优化**:为了提供快速的搜索体验,可能需要实现一些优化策略,比如使用全文搜索引擎(如Lucene.NET)或建立索引来加速查询,或者实现模糊匹配、拼音纠错等高级搜索特性。 6. **安全性**:在处理用户输入时...
Java Web论坛模块是基于Java技术构建的Web应用程序,主要用于实现在线讨论、信息交流等功能。它通常包括用户注册、登录、发帖、回帖、搜索、话题分类、个人中心等核心功能,是社交网络中常见的一种服务组件。在这个...
2. **框架和库**:为了加速开发,开发者通常会利用像React、Vue.js、Angular(Web应用)、Android SDK或iOS SDK(移动应用)这样的框架。这些工具提供了一套完整的结构和组件,帮助开发者快速构建用户界面。 3. **...
C#是一种现代化、面向对象的编程语言,由微软公司开发,广泛应用于Windows平台上的应用程序开发,包括桌面应用、Web应用以及游戏开发等。 首先,我们要理解C#的基本语法和特性。C#支持类、接口、继承、多态等面向...