先来看看效果图:
由于我没"D:\opt\lucene\index",所以不能搜索出东东...
下载地址:
http://apache.dataguru.cn/lucene/java/2.9.4/
lucene-2.9.4-src.zip (包含源码)
lucene-2.9.4.zip
项目结构:
=======================================================
源码部分
=======================================================
/luceneweb/WebContent/configuration.jsp
1
17 <%
18 /* Author: Andrew C. Oliver (acoliver2@users.sourceforge.net) */
19 String appTitle = "Apache Lucene Example - Intranet Server Search Application";
20 /* make sure you point the below string to the index you created with IndexHTML */
21 String indexLocation = "/opt/lucene/index";
22 String appfooter = "Apache Lucene Template WebApp 1.0";
23 %>
/luceneweb/WebContent/footer.jsp
1
17 <% /* Author Andrew C. Oliver (acoliver2@users.sourceforge.net) */ %>
18 <p align="center">
19 <%=appfooter%>
20 p>
21 body>
22 html>
/luceneweb/WebContent/header.jsp
1
17 <%@include file="configuration.jsp"%>
18 <% /* Author: Andrew C. Oliver (acoliver2@users.sourceforge.net */ %>
19 <html>
20 <head>
21 <title><%=appTitle%>title>
22 head>
23 <body>
24
25 <p align="center">
26 Welcome to the Lucene Template application. (This is the header)
27 p>
/luceneweb/WebContent/index.jsp
1
17 <%@include file="header.jsp"%>
18 <% /* Author: Andrew C. Oliver (acoliver2@users.sourceforge.net) */ %>
19 <center>
20 <form name="search" action="results.jsp" method="get">
21 <p>
22 <input name="query" size="44"/> Search Criteria
23 p>
24 <p>
25 <input name="maxresults" size="4" value="100"/> Results Per Page
26 <input type="submit" value="Search"/>
27 p>
28 form>
29 center>
30 <%@include file="footer.jsp"%>
/luceneweb/WebContent/results.jsp
1
17 <%@ page import="javax.servlet.*, javax.servlet.http.*, java.io.*, org.apache.lucene.analysis.*, org.apache.lucene.analysis.standard.StandardAnalyzer, org.apache.lucene.document.*, org.apache.lucene.index.*, org.apache.lucene.store.*, org.apache.lucene.search.*, org.apache.lucene.queryParser.*, org.apache.lucene.demo.*, org.apache.lucene.demo.html.Entities, java.net.URLEncoder, org.apache.lucene.util.Version"%>
18
19 <%
20 /*
21 Author: Andrew C. Oliver, SuperLink Software, Inc. (acoliver2@users.sourceforge.net)
22
23 This jsp page is deliberatly written in the horrible java directly embedded
24 in the page style for an easy and concise demonstration of Lucene.
25 Due note...if you write pages that look like this...sooner or later
26 you'll have a maintenance nightmare. If you use jsps...use taglibs
27 and beans! That being said, this should be acceptable for a small
28 page demonstrating how one uses Lucene in a web app.
29
30 This is also deliberately overcommented. ;-)
31
32 */
33 %>
34 <%!public String escapeHTML(String s) {
35 s = s.replaceAll("&", "&");
36 s = s.replaceAll("<", "<");
37 s = s.replaceAll(">", ">");
38 s = s.replaceAll("\"", """);
39 s = s.replaceAll("'", "'");
40 return s;
41 }%>
42 <%@include file="header.jsp"%>
43 <%
44 boolean error = false; //used to control flow for error messages
45 String indexName = indexLocation; //local copy of the configuration variable
46 IndexSearcher searcher = null; //the searcher used to open/search the index
47 Query query = null; //the Query created by the QueryParser
48 TopDocs hits = null; //the search results
49 int startindex = 0; //the first index displayed on this page
50 int maxpage = 50; //the maximum items displayed on this page
51 String queryString = null; //the query entered in the previous page
52 String startVal = null; //string version of startindex
53 String maxresults = null; //string version of maxpage
54 int thispage = 0; //used for the for/next either maxpage or
55 //hits.totalHits - startindex - whichever is
56 //less
57
58 try {
59 IndexReader reader = IndexReader.open(FSDirectory.open(new File(indexName)), true); // only searching, so read-only=true
60 searcher = new IndexSearcher(reader); //create an indexSearcher for our page
61 //NOTE: this operation is slow for large
62 //indices (much slower than the search itself)
63 //so you might want to keep an IndexSearcher
64 //open
65
66 } catch (Exception e) { //any error that happens is probably due
67 //to a permission problem or non-existant
68 //or otherwise corrupt index
69 %>
70 <p>ERROR opening the Index - contact sysadmin!p>
71 <p>
72 Error message:
73 <%=escapeHTML(e.getMessage())%>p>
74 <%
75 error = true; //don't do anything up to the footer
76 }
77 %>
78 <%
79 if (error == false) { //did we open the index?
80 queryString = request.getParameter("query"); //get the search criteria
81 startVal = request.getParameter("startat"); //get the start index
82 maxresults = request.getParameter("maxresults"); //get max results per page
83 try {
84 maxpage = Integer.parseInt(maxresults); //parse the max results first
85 startindex = Integer.parseInt(startVal); //then the start index
86 } catch (Exception e) {
87 } //we don't care if something happens we'll just start at 0
88 //or end at 50
89
90 if (queryString == null)
91 throw new ServletException("no query " + //if you don't have a query then
92 "specified"); //you probably played on the
93 //query string so you get the
94 //treatment
95
96 Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_CURRENT); //construct our usual analyzer
97 try {
98 QueryParser qp = new QueryParser("contents", analyzer);
99 query = qp.parse(queryString); //parse the
100 } catch (ParseException e) { //query and construct the Query
101 //object
102 //if it's just "operator error"
103 //send them a nice error HTML
104 %>
105 <p>
106 Error while parsing query:
107 <%=escapeHTML(e.getMessage())%>p>
108 <%
109 error = true; //don't bother with the rest of
110 //the page
111 }
112 }
113 %>
114 <%
115 if (error == false && searcher != null) { // if we've had no errors
116 // searcher != null was to handle
117 // a weird compilation bug
118 thispage = maxpage; // default last element to maxpage
119 hits = searcher.search(query, maxpage + startindex); // run the query
120 if (hits.totalHits == 0) { // if we got no results tell the user
121 %>
122 <p>I'm sorry I couldn't find what you were looking for.p>
123 <%
124 error = true; // don't bother with the rest of the
125 // page
126 }
127 }
128
129 if (error == false && searcher != null) {
130 %>
131 <table>
132 <tr>
133 <td>Documenttd>
134 <td>Summarytd>
135 tr>
136 <%
137 if ((startindex + maxpage) > hits.totalHits) {
138 thispage = hits.totalHits - startindex; // set the max index to maxpage or last
139 } // actual search result whichever is less
140
141 for (int i = startindex; i < (thispage + startindex); i++) { // for each element
142 %>
143 <tr>
144 <%
145 Document doc = searcher.doc(hits.scoreDocs[i].doc); //get the next document
146 String doctitle = doc.get("title"); //get its title
147 String url = doc.get("path"); //get its path field
148 if (url != null && url.startsWith("../webapps/")) { // strip off ../webapps prefix if present
149 url = url.substring(10);
150 }
151 if ((doctitle == null) || doctitle.equals("")) //use the path if it has no title
152 doctitle = url;
153 //then output!
154 %>
155 <td><a href="<%=url%>"><%=doctitle%>a>td>
156 <td><%=doc.get("summary")%>td>
157 tr>
158 <%
159 }
160 %>
161 <%
162 if ((startindex + maxpage) < hits.totalHits) { //if there are more results...display
163 //the more link
164
165 String moreurl = "results.jsp?query=" + URLEncoder.encode(queryString) + //construct the "more" link
166 "&maxresults=" + maxpage + "&startat=" + (startindex + maxpage);
167 %>
168 <tr>
169 <td>td>
170 <td><a href="<%=moreurl%>">More Results>>a>td>
171 tr>
172 <%
173 }
174 %>
175 table>
176
177 <%
178 } //then include our footer.
179 if (searcher != null)
180 searcher.close();
181 %>
182 <%@include file="footer.jsp"%>
本文出处:http://www.cnblogs.com/hongten/archive/2012/11/27/hongten_lucene_luceneweb.html
感谢作者