この付録では、独自のコードを記述するか、またはOracle Textウィザードを使用して、CATSEARCH索引タイプを使用した簡単なWeb検索アプリケーションを作成する方法を説明します。次の項目について説明します。
CTXCAT索引タイプは、短い説明テキストおよびそれに関連する構造化データを含む、商品カタログに最適です。この付録では、ユーザーが書籍のタイトルと価格を検索できるブラウザ・ベースの書店カタログの作成方法を説明します。
このアプリケーションは、Java Server Pages(JSP)で作成されています。
このアプリケーションは、必要なコードを自動的に作成する、カタログ問合せアプリケーション・ウィザードを使用して作成できます。JSPのアプリケーション・コードおよびカタログ問合せアプリケーション・ウィザードは、次のOracle Technology NetworkのWebサイトで表示およびダウンロードできます。
http://www.oracle.com/technology/products/text
このWebサイトには、カタログ問合せウィザードの使用方法についての詳細な説明もあります。
このアプリケーションはJava Server Pagesを基にしており、次の要件があります。
Oracle Database(リリース8.1.7以上)が起動され、実行中であること。
ApacheなどのWebサーバーが起動され、実行中であり、Oracle Databaseに要求を送信するように適切に構成されていること。
このアプリケーションは、書籍のタイトルと価格を検索できるオンライン書店をモデル化したものです。
手順1 表の作成
書籍のタイトル、発行者、価格などの書籍情報を格納する表を作成する必要があります。SQL*Plusで次を実行します。
sqlplus>create table book_catalog (
id numeric,
title varchar2(80),
publisher varchar2(25),
price numeric )
手順2 SQL*Loaderを使用したデータのロード
書籍データは、オペレーティング・システムのコマンドラインからSQL*Loaderを使用して、次のようにロードします。
% sqlldr userid=ctxdemo/ctxdemo control=loader.ctl
手順3 索引セットの作成
SQL*Plusから索引セットを次のように作成します。
sqlplus>begin
ctx_ddl.create_index_set('bookset');
ctx_ddl.add_index('bookset','price');
ctx_ddl.add_index('bookset','publisher');
end;
/
手順4 索引の作成
SQL*PlusからCTXCAT索引を次のように作成します。
sqlplus>create index book_idx on book_catalog (title)
indextype is ctxsys.ctxcat
parameters('index set bookset');
手順5 CATSEARCHを使用した単純な検索
新しく作成した索引をSQL*Plusで次のようにテストします。
sqlplus>select id, title from book_catalog
where catsearch(title,'Java','price > 10 order by price') > 0
手順6 WebサイトのJSPディレクトリへのcatalogSearch.jspファイルのコピー
このコピーを行うと、ブラウザからアプリケーションにアクセスできます。URLには、http://localhost:port/path/catalogSearch.jspを指定する必要があります。
アプリケーションでは、ブラウザに問合せのエントリ・ボックスを表示し、問合せ結果をHTMLリンクのリストとして戻します。図B-1を参照してください。
この項では、Webアプリケーション・サンプルの作成に使用するコードを記載します。次のファイルのコードを記載します。
LOAD DATA
INFILE 'loader.dat'
INTO TABLE book_catalog
REPLACE
FIELDS TERMINATED BY ';'
(id, title, publisher, price)
1; A History of Goats; SPINDRIFT BOOKS;50 2; Robust Recipes Inspired by Eating Too Much;SPINDRIFT BOOKS;28 3; Atlas of Greenland History; SPINDRIFT BOOKS; 35 4; Bed and Breakfast Guide to Greenland; SPINDRIFT BOOKS; 37 5; Quitting Your Job and Running Away; SPINDRIFT BOOKS;25 6; Best Noodle Shops of Omaha ;SPINDRIFT BOOKS; 28 7; Complete Book of Toes; SPINDRIFT BOOKS;16 8; Complete Idiot's Guide to Nuclear Technology;SPINDRIFT BOOKS; 28 9; Java Programming for Woodland Animals; LOW LIFE BOOK CO; 10 10; Emergency Surgery Tips and Tricks;SPOT-ON PUBLISHING;10 11; Programming with Your Eyes Shut; KLONDIKE BOOKS; 10 12; Forest Fires of North America, 1858-1882; CALAMITY BOOKS; 11 13; Spanish in Twelve Minutes; WRENCH BOOKS 11 14; Better Sex and Romance Through C++; CALAMITY BOOKS; 12 15; Oracle Internet Application Server Enterprise Edition; KANT BOOKS; 12 16; Oracle Internet Developer Suite; SPAMMUS BOOK CO;13 17; Telling the Truth to Your Pets; IBEX BOOKS INC; 13 18; Go Ask Alice's Restaurant;HUMMING BOOKS; 13 19; Life Begins at 93; CALAMITY BOOKS; 17 20; Dating While Drunk; BALLAST BOOKS; 14 21; The Second-to-Last Mohican; KLONDIKE BOOKS; 14 22; Eye of Horus; An Oracle of Ancient Egypt; BIG LITTLE BOOKS; 15 23; Introduction to Sitting Down; IBEX BOOKS INC; 15
<%@ page import="java.sql.* , oracle.jsp.dbutil.*" %>
<jsp:useBean id="name" class="oracle.jsp.jml.JmlString" scope="request" >
<jsp:setProperty name="name" property="value" param="v_query" />
</jsp:useBean>
<%
String connStr="jdbc:oracle:thin:@machine-domain-name:1521:betadev";
java.util.Properties info = new java.util.Properties();
Connection conn = null;
ResultSet rset = null;
Statement stmt = null;
if (name.isEmpty() ) {
%>
<html>
<title>Catalog Search</title>
<body>
<center>
<form method=post>
Search for book title:
<input type=text name="v_query" size=10>
where publisher is
<select name="v_publisher">
<option value="ADDISON WESLEY">ADDISON WESLEY
<option value="HUMMING BOOKS">HUMMING BOOKS
<option value="WRENCH BOOKS">WRENCH BOOKS
<option value="SPOT-ON PUBLISHING">SPOT-ON PUBLISHING
<option value="SPINDRIFT BOOKS">SPINDRIFT BOOKS
<option value="LOW LIFE BOOK CO">LOW LIFE BOOK CO
<option value="KLONDIKE BOOKS">KLONDIKE BOOKS
<option value="CALAMITY BOOKS">CALAMITY BOOKS
<option value="IBEX BOOKS INC">IBEX BOOKS INC
<option value="BIG LITTLE BOOKS">BIG LITTLE BOOKS
</select>
and price is
<select name="v_op">
<option value="=">=
<option value="<"><
<option value=">">>
</select>
<input type=text name="v_price" size=2>
<input type=submit value="Search">
</form>
</center>
<hr>
</body>
</html>
<%
}
else {
String v_query = request.getParameter("v_query");
String v_publisher = request.getParameter("v_publisher");
String v_price = request.getParameter("v_price");
String v_op = request.getParameter("v_op");
%>
<html>
<title>Catalog Search</title>
<body>
<center>
<form method=post action="catalogSearch.jsp">
Search for book title:
<input type=text name="v_query" value=
<%= v_query %>
size=10>
where publisher is
<select name="v_publisher">
<option value="ADDISON WESLEY">ADDISON WESLEY
<option value="HUMMING BOOKS">HUMMING BOOKS
<option value="WRENCH BOOKS">WRENCH BOOKS
<option value="SPOT-ON PUBLISHING">SPOT-ON PUBLISHING
<option value="SPINDRIFT BOOKS">SPINDRIFT BOOKS
<option value="LOW LIFE BOOK CO">LOW LIFE BOOK CO
<option value="KLONDIKE BOOKS">KLONDIKE BOOKS
<option value="CALAMITY BOOKS">CALAMITY BOOKS
<option value="IBEX BOOKS INC">IBEX BOOKS INC
<option value="BIG LITTLE BOOKS">BIG LITTLE BOOKS
</select>
and price is
<select name="v_op">
<option value="=">=
<option value="<"><
<option value=">">>
</select>
<input type=text name="v_price" value=
<%= v_price %> size=2>
<input type=submit value="Search">
</form>
</center>
<%
try {
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver() );
info.put ("user", "ctxdemo");
info.put ("password","ctxdemo");
conn = DriverManager.getConnection(connStr,info);
stmt = conn.createStatement();
String theQuery = request.getParameter("v_query");
String thePrice = request.getParameter("v_price");
// select id,title
// from book_catalog
// where catsearch (title,'Java','price >10 order by price') > 0
// select title
// from book_catalog
// where catsearch(title,'Java','publisher = ''CALAMITY BOOKS''
and price < 40 order by price' )>0
String myQuery = "select title, publisher, price from book_catalog
where catsearch(title, '"+theQuery+"',
'publisher = ''"+v_publisher+"'' and price "+v_op+thePrice+"
order by price' ) > 0";
rset = stmt.executeQuery(myQuery);
String color = "ffffff";
String myTitle = null;
String myPublisher = null;
int myPrice = 0;
int items = 0;
while (rset.next()) {
myTitle = (String)rset.getString(1);
myPublisher = (String)rset.getString(2);
myPrice = (int)rset.getInt(3);
items++;
if (items == 1) {
%>
<center>
<table border="0">
<tr bgcolor="#6699CC">
<th>Title</th>
<th>Publisher</th>
<th>Price</th>
</tr>
<%
}
%>
<tr bgcolor="#<%= color %>">
<td> <%= myTitle %></td>
<td> <%= myPublisher %></td>
<td> $<%= myPrice %></td>
</tr>
<%
if (color.compareTo("ffffff") == 0)
color = "eeeeee";
else
color = "ffffff";
}
} catch (SQLException e) {
%>
<b>Error: </b> <%= e %><p>
<%
} finally {
if (conn != null) conn.close();
if (stmt != null) stmt.close();
if (rset != null) rset.close();
}
%>
</table>
</center>
</body>
</html>
<%
}
%>