一、输入关键字的lucene.html
<html>
<body>
<form name="form1" method="post" action="search.jsp">
请输入关键字:<input type="text" name="keyword">
<input type="submit" name="Submit" value="提交">
</form>
</body>
</html>
效果图:
二、进行搜索和显示结果的search.jsp <%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import = "org.apache.lucene.analysis.standard.StandardAnalyzer" %>
<%@ page import="org.apache.lucene.index.IndexReader" %>
<%@ page import="org.apache.lucene.document.Document" %>
<%@ page import="org.apache.lucene.search.IndexSearcher" %>
<%@ page import="org.apache.lucene.search.Hits" %>
<%@ page import="org.apache.lucene.search.Query" %>
<%@ page import="page.Pagination" %> <%@ page import="org.apache.lucene.queryParser.QueryParser" %>
<%@ page import ="org.apache.lucene.analysis.Analyzer" %>
<%
String queryString = request.getParameter("keyword");
if (queryString == null||queryString.length()==0){
out.println("搜索关键字不能为空");
}else{
queryString=new String(queryString.getBytes("ISO8859_1"));
String indexPath=getServletContext().getRealPath("/")+"index";
boolean error = false;
Document doc;
IndexSearcher searcher = null;
Query query = null;
Hits hits = null;
try {
searcher = new IndexSearcher(IndexReader.open(indexPath));
} catch (Exception e) {
out.print("没有找到索引文件!");
out.print(e.getMessage());
error = true;
}
if (error == false) {
Analyzer analyzer = new StandardAnalyzer();
try {
query = QueryParser.parse(queryString, "Article_name", analyzer);
} catch (Exception e) {
out.print(e.getMessage());
error = true;
}
}
if (error == false && searcher != null) {
hits = searcher.search(query);
if (hits.length() == 0) {
out.print("对不起!没有找到你所需要的资源. ");
error = true;
}
}
if (error == false && searcher != null) {
out.print("搜索关键字:"+ queryString+ "");
//Pagination类是网上下载的,需要传递一个向量,你可以改,这样就不用做二遍事
Vector list=new Vector();
for(int i=0;i< hits.length();i++){
doc = hits.doc(i);
list.add(doc);
}
out.print("找到的资源");
Pagination pagination = null;
String pageNumber = request.getParameter("pageNumber");
int showItemNumber = 10;
if (pageNumber == null) {
pageNumber = "1";
}
String HTML = "";
if (list != null && list.size() > 0) {
pagination = new Pagination();
pagination.setPageNumber(Integer.parseInt(pageNumber));
pagination.setShowItemNumber(showItemNumber);
pagination.setVisitPageURL("search.jsp?keyword="+queryString);
list =(Vector) pagination.interceptListByStarItemNumber(list);
for(int i=0;i< list.size();i++)
{
doc =(Document) list.get(i);
String A_id=doc.get("Article_id");
String doctitle = doc.get("Article_name");
String url = doc.get("File_name")+"?id="+A_id;
out.print("< a href='http://127.0.0.1:8080/cwbwebhome/"+url+"'>(★) "+doctitle+"");
}
HTML = pagination.buildHTML("600");
out.print(HTML);
}
}
}
分享到:
相关推荐
在本实例中,我们将深入探讨Lucene 4.7版本,涵盖索引的创建、修改、删除,以及查询时的排序、分页、优化和高亮显示等功能。此外,我们还将了解如何使用不同的分词器,以适应不同场景的需求。 首先,让我们从基础...
Lucene还提供了许多高级功能,如近实时搜索(NRT)、多字段搜索、模糊查询、短语查询、通配符查询、正向索引、倒排索引等。同时,Lucene支持分布式搜索,通过Solr或Elasticsearch等工具,可以构建大规模的企业级搜索...
【Lucene.NET 实例】 Lucene.NET 是一个开源全文搜索引擎库,它是 Apache Lucene 的 .NET 版本,为 .NET 开发者提供了强大的搜索功能。Lucene.NET 提供了高性能、可扩展的文本搜索解决方案,广泛应用于各种应用程序...
本压缩包中的代码着重展示了如何使用 Lucene 进行分页搜索和结果高亮显示。下面将详细解释这两个关键知识点。 **一、Lucene 分页搜索** 在大型数据集上进行搜索时,一次性返回所有结果并不实际,因此分页搜索显得...
Lucene提供了一套完整的搜索索引框架,包括文本分析、索引创建、查询解析和结果排序等功能。它支持多种文件格式,如HTML、PDF、Word等,能够对这些文件中的文本进行高效的检索。在Web环境下,Lucene可以集成到Web...
通过实例,我们可以创建一个简单的索引器,将文本文件或数据库内容导入Lucene索引,然后编写一个搜索引擎来查询这些内容。这通常涉及以下步骤: - 创建索引:定义Document结构,使用Analyzer处理Field,通过...
3. **查询与搜索**:讲解如何使用查询解析器将用户输入的字符串转换为Lucene查询对象,然后利用搜索器在索引中查找匹配的文档。此外,还会涉及评分系统(Scoring),它决定了搜索结果的相关性。 4. **结果集处理**...
**Lucene分词与查询详解** Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。它提供了一套强大的API,用于索引文本数据,并执行复杂的查询操作。在深入理解Lucene的分词与查询机制之前,我们...
6. **搜索(Searching)**:用户输入查询后,Lucene 将查询语句转换为一系列的术语,并在倒排索引中查找匹配的文档。 7. **评分(Scoring)**:Lucene 会根据相关性对搜索结果进行评分,得分高的结果优先展示。 在...
- **索引**: Lucene首先需要创建索引,将文本数据转换为可搜索的结构。索引过程包括分析、分词和倒排索引等步骤。 - **分析器**: 分析器负责将输入文本拆分成有意义的单位,即术语(tokens),并进行规范化,如...
3. **搜索**:用户输入查询后,Lucene会使用查询解析器将查询语句转化为可执行的搜索策略,然后在索引中查找匹配的文档。 4. **排序和评分**:Lucene根据匹配度对搜索结果进行排序。匹配度通常基于TF-IDF(词频-逆...
**Lucene 概述** Lucene 是一个高性能、全文本搜索库...实际的 "luceneDemo" 可能包含更丰富的功能,例如支持多字段查询、高亮显示搜索结果、分页显示等。学习和理解 Lucene,可以帮助开发者构建强大的全文检索系统。
1. **内存管理**: Lucene索引可能会占用大量内存,合理配置 JVM 内存有助于避免性能问题。 2. **优化索引**: 定期重建索引,以保持其效率和准确性。同时,考虑使用多线程来加速索引创建。 3. **查询性能**: 适当...
《Lucene学习实战系列:高亮与分页技术解析》 Lucene,作为Apache软件基金会的一个开源全文搜索引擎库,被广泛应用于各种搜索场景。本文将深入探讨如何在Lucene中实现高亮显示搜索结果和高效的分页功能,帮助开发者...
查询时,需要创建查询对象,使用查询执行器在索引库中执行查询,获取搜索结果,并根据需要对结果进行排序和分页。 通过学习Lucene3.0 使用教程,开发者能够掌握全文检索的基本原理和技术,为自己的应用系统添加高效...
Lucene的核心特性包括文本分析、索引创建、查询解析以及高效的搜索算法,使得开发者能够轻松地在大量文本数据中实现快速、准确的搜索。 **1. 文本分析** Lucene的文本分析是其处理文本的关键步骤。它涉及将输入的...
在大数据量场景下,可以采用分片策略,将索引分散到多个节点上,利用Lucene的分布式搜索能力,提高查询效率。 #### 3.2 延迟索引更新 为了减少实时索引更新对系统性能的影响,可以采用延迟索引更新策略,将多个小...
在项目中,你可能有一个名为`Indexer`的类,它负责读取数据源(例如,从文件、数据库或其他来源),使用Analyzer处理文本,并将处理后的数据写入到Lucene索引中。索引可以存储在文件系统或者内存中,取决于项目的...
Lucene提供了一套完整的文本检索框架,包括索引构建、查询解析、评分以及结果排序等功能。它并不直接处理网络请求,而是作为后端的搜索服务,为前端应用提供数据支持。在B/S架构下,通常会结合其他Web框架如Spring ...
Lucene提供了文本分析、索引创建、搜索查询解析和执行等功能,为构建高性能搜索引擎提供了基础工具。 **二、Lucene的工作流程** 1. 文档收集:首先,需要将要索引的数据(如HTML文档、数据库记录等)导入到Lucene。...