2007-06-06 23:17:18 -04:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2006-02-24 21:51:19 -05:00
< html >
< head >
< META http-equiv = "Content-Type" content = "text/html; charset=UTF-8" >
< meta content = "Apache Forrest" name = "Generator" >
2011-06-22 06:49:19 -04:00
< meta name = "Forrest-version" content = "0.9" >
2009-06-11 07:59:04 -04:00
< meta name = "Forrest-skin-name" content = "lucene" >
2006-03-01 14:50:03 -05:00
< title > Introduction to The Solr Enterprise Search Server< / title >
2006-02-24 21:51:19 -05:00
< link type = "text/css" href = "skin/basic.css" rel = "stylesheet" >
< link media = "screen" type = "text/css" href = "skin/screen.css" rel = "stylesheet" >
< link media = "print" type = "text/css" href = "skin/print.css" rel = "stylesheet" >
< link type = "text/css" href = "skin/profile.css" rel = "stylesheet" >
< script src = "skin/getBlank.js" language = "javascript" type = "text/javascript" > < / script > < script src = "skin/getMenu.js" language = "javascript" type = "text/javascript" > < / script > < script src = "skin/fontsize.js" language = "javascript" type = "text/javascript" > < / script >
< link rel = "shortcut icon" href = "images/favicon.ico" >
< / head >
< body onload = "init()" >
< script type = "text/javascript" > ndeSetTextSize ( ) ; < / script >
< div id = "top" >
2007-06-06 23:17:18 -04:00
<!-- +
|breadtrail
+-->
2006-02-24 21:51:19 -05:00
< div class = "breadtrail" >
2007-01-18 11:27:03 -05:00
< a href = "http://www.apache.org/" > apache< / a > > < a href = "http://lucene.apache.org/" > lucene< / a > < script src = "skin/breadcrumbs.js" language = "JavaScript" type = "text/javascript" > < / script >
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|header
+-->
2006-02-24 21:51:19 -05:00
< div class = "header" >
2007-06-06 23:17:18 -04:00
<!-- +
|start group logo
+-->
2006-02-24 21:51:19 -05:00
< div class = "grouplogo" >
2007-01-18 00:10:35 -05:00
< a href = "http://lucene.apache.org/" > < img class = "logoImage" alt = "Lucene" src = "images/lucene_green_150.gif" title = "Apache Lucene" > < / a >
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end group logo
+-->
<!-- +
|start Project Logo
+-->
2006-02-24 21:51:19 -05:00
< div class = "projectlogo" >
2009-08-25 18:04:37 -04:00
< a href = "http://lucene.apache.org/solr/" > < img class = "logoImage" alt = "Solr" src = "images/solr.jpg" title = "Solr Description" > < / a >
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end Project Logo
+-->
<!-- +
|start Search
+-->
2006-02-24 21:51:19 -05:00
< div class = "searchbox" >
2011-01-07 13:43:58 -05:00
< form id = "searchform" action = "http://search.lucidimagination.com/p:solr" method = "get" class = "roundtopsmall" >
2009-06-11 07:59:04 -04:00
< input onFocus = "getBlank (this, 'Search the site with Solr');" size = "25" name = "q" id = "query" type = "text" value = "Search the site with Solr" >
2011-01-07 13:43:58 -05:00
< input onclick = "selectProvider(this.form)" name = "Search" value = "Search" type = "submit" >
@
< select id = "searchProvider" name = "searchProvider" > < option value = "any" > select provider< / option > < option value = "lucid" > Lucid Find< / option > < option value = "sl" > Search-Lucene< / option > < / select >
2006-02-24 21:51:19 -05:00
< / form >
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end search
+-->
<!-- +
|start Tabs
+-->
2006-02-24 21:51:19 -05:00
< ul id = "tabs" >
< li class = "current" >
2007-06-06 23:17:18 -04:00
< a class = "selected" href = "index.html" > Main< / a >
2006-02-24 21:51:19 -05:00
< / li >
< li >
2010-07-09 22:50:51 -04:00
< a class = "unselected" href = "http://wiki.apache.org/solr/FrontPage" > Wiki< / a >
2006-02-24 21:51:19 -05:00
< / li >
< / ul >
2007-06-06 23:17:18 -04:00
<!-- +
|end Tabs
+-->
2006-02-24 21:51:19 -05:00
< / div >
< / div >
< div id = "main" >
< div id = "publishedStrip" >
2007-06-06 23:17:18 -04:00
<!-- +
|start Subtabs
+-->
2006-02-24 21:51:19 -05:00
< div id = "level2tabs" > < / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end Endtabs
+-->
2006-02-24 21:51:19 -05:00
< script type = "text/javascript" > < ! - -
2007-06-06 23:17:18 -04:00
document.write("Last Published: " + document.lastModified);
2006-02-24 21:51:19 -05:00
// -->< / script >
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|breadtrail
+-->
2006-02-24 21:51:19 -05:00
< div class = "breadtrail" >
2007-06-06 23:17:18 -04:00
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|start Menu, mainarea
+-->
<!-- +
|start Menu
+-->
2006-02-24 21:51:19 -05:00
< div id = "menu" >
< div onclick = "SwitchMenu('menu_1.1', 'skin/')" id = "menu_1.1Title" class = "menutitle" > About< / div >
< div id = "menu_1.1" class = "menuitemgroup" >
< div class = "menuitem" >
< a href = "index.html" title = "Welcome to Solr" > Welcome< / a >
< / div >
< div class = "menuitem" >
2010-03-26 11:37:10 -04:00
< a href = "http://lucene.apache.org/java/docs/whoweare.html" title = "Lucene/Solr Committers" > Who We Are< / a >
2006-02-24 21:51:19 -05:00
< / div >
< / div >
< div onclick = "SwitchMenu('menu_selected_1.2', 'skin/')" id = "menu_selected_1.2Title" class = "menutitle" style = "background-image: url('skin/images/chapter_open.gif');" > Documentation< / div >
< div id = "menu_selected_1.2" class = "selectedmenuitemgroup" style = "display: block;" >
< div class = "menupage" >
< div class = "menupagetitle" > Features< / div >
< / div >
< div class = "menuitem" >
2007-01-18 00:10:35 -05:00
< a href = "tutorial.html" > Tutorial< / a >
2006-02-24 21:51:19 -05:00
< / div >
< div class = "menuitem" >
2010-07-09 22:50:51 -04:00
< a href = "http://wiki.apache.org/solr/FrontPage" > Docs (Wiki)< / a >
2006-02-24 21:51:19 -05:00
< / div >
< div class = "menuitem" >
2007-01-18 00:10:35 -05:00
< a href = "http://wiki.apache.org/solr/FAQ" > FAQ< / a >
2006-02-24 21:51:19 -05:00
< / div >
< div class = "menuitem" >
2008-08-25 08:07:42 -04:00
< a href = "api/index.html" > All Javadoc< / a >
< / div >
< div class = "menuitem" >
< a href = "api/solrj/index.html" > SolrJ Javadoc< / a >
2006-02-24 21:51:19 -05:00
< / div >
2011-04-01 10:41:09 -04:00
< div class = "menuitem" >
< a href = "api/test-framework/index.html" > Test Framework Javadoc< / a >
< / div >
2006-02-24 21:51:19 -05:00
< / div >
< div onclick = "SwitchMenu('menu_1.3', 'skin/')" id = "menu_1.3Title" class = "menutitle" > Resources< / div >
< div id = "menu_1.3" class = "menuitemgroup" >
< div class = "menuitem" >
2007-01-18 00:10:35 -05:00
< a href = "http://www.apache.org/dyn/closer.cgi/lucene/solr/" > Download< / a >
2006-02-24 21:51:19 -05:00
< / div >
< div class = "menuitem" >
< a href = "mailing_lists.html" > Mailing Lists< / a >
< / div >
< div class = "menuitem" >
< a href = "issue_tracking.html" > Issue Tracking< / a >
< / div >
< div class = "menuitem" >
< a href = "version_control.html" > Version Control< / a >
< / div >
< / div >
< div onclick = "SwitchMenu('menu_1.4', 'skin/')" id = "menu_1.4Title" class = "menutitle" > Related Projects< / div >
< div id = "menu_1.4" class = "menuitemgroup" >
< div class = "menuitem" >
< a href = "http://lucene.apache.org/java/" > Lucene Java< / a >
< / div >
< div class = "menuitem" >
< a href = "http://lucene.apache.org/nutch/" > Nutch< / a >
< / div >
< / div >
2011-01-07 13:43:58 -05:00
< script type = "text/javascript" >
function selectProvider(form) {
provider = form.elements['searchProvider'].value;
if (provider == "any") {
if (Math.random() > 0.5) {
provider = "lucid";
} else {
provider = "sl";
}
}
if (provider == "lucid") {
form.action = "http://search.lucidimagination.com/p:solr";
} else if (provider == "sl") {
form.action = "http://search-lucene.com/solr";
}
days = 365; // cookie will be valid for a year
date = new Date();
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
expires = "; expires=" + date.toGMTString();
document.cookie = "searchProvider=" + provider + expires + "; path=/";
}
if (document.cookie.length>0) {
cStart=document.cookie.indexOf("searchProvider=");
if (cStart!=-1) {
cStart=cStart + "searchProvider=".length;
cEnd=document.cookie.indexOf(";", cStart);
if (cEnd==-1) {
cEnd=document.cookie.length;
}
provider = unescape(document.cookie.substring(cStart,cEnd));
document.forms['searchform'].elements['searchProvider'].value = provider;
}
}
< / script >
2006-02-24 21:51:19 -05:00
< div id = "credit" > < / div >
< div id = "roundbottom" >
< img style = "display: none" class = "corner" height = "15" width = "15" alt = "" src = "skin/images/rc-b-l-15-1body-2menu-3menu.png" > < / div >
2007-06-06 23:17:18 -04:00
<!-- +
|alternative credits
+-->
2009-08-25 15:29:33 -04:00
< div id = "credit2" >
2011-06-22 06:49:19 -04:00
< a href = "http://www.packtpub.com/solr-1-4-enterprise-search-server?utm_source=http%3A%2F%2Flucene.apache.org%2Fsolr%2F&utm_medium=spons&utm_content=pod&utm_campaign=mdb_000275" > < img border = "0" title = "Book: Solr 1.4 Enterprise Search Server" alt = "Book: Solr 1.4 Enterprise Search Server - logo" src = "images/solr-book-image.jpg" style = "width: 150px;height: 185px;" > < / a > < a href = "http://www.lucidimagination.com/Downloads/LucidWorks-for-Solr/Reference-Guide?sc=AP" > < img border = "0" title = "LucidWorks for Solr Certified Distribution Reference Guide" alt = "LucidWorks for Solr Certified Distribution Reference Guide - logo" src = "images/lucidworks_reference_guide.png" style = "width: 150px;height: 185px;" > < / a >
2009-08-25 15:29:33 -04:00
< / div >
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end Menu
+-->
<!-- +
|start content
+-->
2006-02-24 21:51:19 -05:00
< div id = "content" >
< div title = "Portable Document Format" class = "pdflink" >
< a class = "dida" href = "features.pdf" > < img alt = "PDF -icon" src = "skin/images/pdfdoc.gif" class = "skin" > < br >
PDF< / a >
< / div >
2006-03-01 14:50:03 -05:00
< h1 > Introduction to The Solr Enterprise Search Server< / h1 >
2006-02-24 21:51:19 -05:00
< div id = "minitoc-area" >
< ul class = "minitoc" >
< li >
< a href = "#Solr+in+a+Nutshell" > Solr in a Nutshell< / a >
< / li >
< li >
2006-03-01 14:50:03 -05:00
< a href = "#Solr+Uses+the+Lucene+Search+Library+and+Extends+it%21" > Solr Uses the Lucene Search Library and Extends it!< / a >
2006-02-24 21:51:19 -05:00
< / li >
< li >
< a href = "#Detailed+Features" > Detailed Features< / a >
< ul class = "minitoc" >
< li >
< a href = "#Schema" > Schema< / a >
< / li >
< li >
< a href = "#Query" > Query< / a >
< / li >
< li >
< a href = "#Core" > Core< / a >
< / li >
< li >
< a href = "#Caching" > Caching< / a >
< / li >
< li >
< a href = "#Replication" > Replication< / a >
< / li >
< li >
< a href = "#Admin+Interface" > Admin Interface< / a >
< / li >
< / ul >
< / li >
< / ul >
< / div >
2011-06-22 06:49:19 -04:00
< a name = "N1000E" > < / a > < a name = "Solr+in+a+Nutshell" > < / a >
2006-02-24 21:51:19 -05:00
< h2 class = "boxed" > Solr in a Nutshell< / h2 >
< div class = "section" >
< p >
2011-03-17 13:32:39 -04:00
Solr is a standalone enterprise search server with a REST-like API. You put documents in it (called "indexing") via XML, JSON or binary over HTTP. You query it via HTTP GET and receive XML, JSON, or binary results.
2006-02-24 21:51:19 -05:00
< / p >
< ul >
< li > Advanced Full-Text Search Capabilities < / li >
< li > Optimized for High Volume Web Traffic < / li >
2009-10-30 21:37:34 -04:00
< li > Standards Based Open Interfaces - XML,JSON and HTTP < / li >
2006-02-24 21:51:19 -05:00
< li > Comprehensive HTML Administration Interfaces < / li >
2008-08-25 08:07:42 -04:00
< li > Server statistics exposed over JMX for monitoring < / li >
2006-03-01 14:50:03 -05:00
< li > Scalability - Efficient Replication to other Solr Search Servers < / li >
2006-02-24 21:51:19 -05:00
< li > Flexible and Adaptable with XML configuration < / li >
< li > Extensible Plugin Architecture < / li >
< / ul >
< / div >
2011-06-22 06:49:19 -04:00
< a name = "N10033" > < / a > < a name = "Solr+Uses+the+Lucene+Search+Library+and+Extends+it%21" > < / a >
2006-03-01 14:50:03 -05:00
< h2 class = "boxed" > Solr Uses the Lucene Search Library and Extends it!< / h2 >
2006-02-24 21:51:19 -05:00
< div class = "section" >
< ul >
2007-06-06 23:17:18 -04:00
< li > A Real Data Schema, with Numeric Types, Dynamic Fields, Unique Keys < / li >
2006-02-24 21:51:19 -05:00
< li > Powerful Extensions to the Lucene Query Language < / li >
2009-10-30 21:37:34 -04:00
< li > Faceted Search and Filtering < / li >
2006-02-24 21:51:19 -05:00
2011-03-17 13:32:39 -04:00
< li > Geospatial Search < / li >
2006-02-24 21:51:19 -05:00
< li > Advanced, Configurable Text Analysis < / li >
< li > Highly Configurable and User Extensible Caching < / li >
< li > Performance Optimizations < / li >
< li > External Configuration via XML < / li >
< li > An Administration Interface < / li >
< li > Monitorable Logging < / li >
2009-10-30 21:37:34 -04:00
< li > Fast Incremental Updates and Index Replication < / li >
2007-06-06 23:17:18 -04:00
2009-10-30 21:37:34 -04:00
< li > Highly Scalable Distributed search with sharded index across multiple hosts < / li >
2008-08-25 08:07:42 -04:00
2011-03-17 13:32:39 -04:00
< li > JSON, XML, CSV/delimited-text, and binary update formats < / li >
2008-08-25 08:07:42 -04:00
< li > Easy ways to pull in data from databases and XML files from local disk and HTTP sources < / li >
2009-10-30 21:37:34 -04:00
< li > Rich Document Parsing and Indexing (PDF, Word, HTML, etc) using Apache Tika < / li >
2011-03-17 13:32:39 -04:00
< li > Apache UIMA integration for configurable metadata extraction < / li >
2008-08-25 08:07:42 -04:00
< li > Multiple search indices < / li >
2006-02-24 21:51:19 -05:00
< / ul >
< / div >
2011-06-22 06:49:19 -04:00
< a name = "N10070" > < / a > < a name = "Detailed+Features" > < / a >
2006-02-24 21:51:19 -05:00
< h2 class = "boxed" > Detailed Features< / h2 >
< div class = "section" >
2011-06-22 06:49:19 -04:00
< a name = "N10076" > < / a > < a name = "Schema" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Schema< / h3 >
< ul >
< li > Defines the field types and fields of documents< / li >
< li > Can drive more intelligent processing< / li >
< li > Declarative Lucene Analyzer specification< / li >
2007-06-06 23:17:18 -04:00
< li > Dynamic Fields enables on-the-fly addition of new fields< / li >
2006-02-24 21:51:19 -05:00
< li > CopyField functionality allows indexing a single field multiple ways, or combining multiple fields into a single searchable field< / li >
< li > Explicit types eliminates the need for guessing types of fields< / li >
< li > External file-based configuration of stopword lists, synonym lists, and protected word lists< / li >
2007-06-06 23:17:18 -04:00
< li > Many additional text analysis components including word splitting, regex and sounds-like filters< / li >
2006-02-24 21:51:19 -05:00
< / ul >
2011-06-22 06:49:19 -04:00
< a name = "N10097" > < / a > < a name = "Query" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Query< / h3 >
< ul >
2009-10-30 21:37:34 -04:00
< li > HTTP interface with configurable response formats (XML/XSLT, JSON, Python, Ruby, PHP, Velocity, binary)< / li >
2006-07-31 11:33:23 -04:00
2011-03-17 13:32:39 -04:00
< li > Sort by any number of fields, and by complex functions of numeric fields< / li >
2006-07-31 11:33:23 -04:00
2007-06-06 23:17:18 -04:00
< li > Advanced DisMax query parser for high relevancy results from user-entered queries< / li >
2006-11-06 15:16:04 -05:00
2007-06-06 23:17:18 -04:00
< li > Highlighted context snippets< / li >
2011-03-17 13:32:39 -04:00
< li > Faceted Searching based on unique field values, explicit queries, date ranges, and numeric ranges< / li >
2009-10-30 21:37:34 -04:00
< li > Multi-Select Faceting by tagging and selectively excluding filters< / li >
2006-02-24 21:51:19 -05:00
2008-08-25 08:07:42 -04:00
< li > Spelling suggestions for user queries< / li >
< li > More Like This suggestions for given document< / li >
2009-10-30 21:37:34 -04:00
< li > Function Query - influence the score by user specified complex functions of
numeric fields or query relevancy scores.< / li >
2006-02-24 21:51:19 -05:00
2009-10-30 21:37:34 -04:00
< li > Range filter over Function Query results< / li >
2006-02-24 21:51:19 -05:00
2007-06-06 23:17:18 -04:00
< li > Date Math - specify dates relative to "NOW" in queries and updates< / li >
2009-10-30 21:37:34 -04:00
< li > Dynamic search results clustering using Carrot2< / li >
< li > Numeric field statistics such as min, max, average, standard deviation < / li >
< li > Combine queries derived from different syntaxes< / li >
2011-03-17 13:32:39 -04:00
< li > Auto-suggest functionality for completing user queries< / li >
2009-10-30 21:37:34 -04:00
< li > Allow configuration of top results for a query, overriding normal scoring and sorting< / li >
2006-02-24 21:51:19 -05:00
< li > Performance Optimizations< / li >
< / ul >
2011-06-22 06:49:19 -04:00
< a name = "N100D3" > < / a > < a name = "Core" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Core< / h3 >
< ul >
2009-10-30 21:37:34 -04:00
< li > Dynamically create and delete document collections without restarting< / li >
2006-02-24 21:51:19 -05:00
< li > Pluggable query handlers and extensible XML data format< / li >
2009-10-30 21:37:34 -04:00
< li > Pluggable user functions for Function Query< / li >
2006-02-24 21:51:19 -05:00
2009-10-30 21:37:34 -04:00
< li > Customizable component based request handler with distributed search support< / li >
2006-02-24 21:51:19 -05:00
2009-10-30 21:37:34 -04:00
< li > Document uniqueness enforcement based on unique key field< / li >
2006-02-24 21:51:19 -05:00
2009-10-30 21:37:34 -04:00
< li > Duplicate document detection, including fuzzy near duplicates< / li >
2006-02-24 21:51:19 -05:00
2009-10-30 21:37:34 -04:00
< li > Custom index processing chains, allowing document manipulation before indexing< / li >
< li > User configurable commands triggered on index changes< / li >
2006-02-24 21:51:19 -05:00
< li > Ability to control where docs with the sort field missing will be placed< / li >
2007-06-06 23:17:18 -04:00
< li > "Luke" request handler for corpus information< / li >
2006-02-24 21:51:19 -05:00
< / ul >
2011-06-22 06:49:19 -04:00
< a name = "N100FA" > < / a > < a name = "Caching" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Caching< / h3 >
< ul >
< li > Configurable Query Result, Filter, and Document cache instances< / li >
2009-10-30 21:37:34 -04:00
< li > Pluggable Cache implementations, including a lock free, high concurrency implementation< / li >
2006-02-24 21:51:19 -05:00
< li > Cache warming in background
< ul >
< li > When a new searcher is opened, configurable searches are run against
it in order to warm it up to avoid
slow first hits. During warming, the current searcher handles live requests.
< / li >
< / ul >
< / li >
< li > Autowarming in background
< ul >
< li > The most recently accessed items in the caches of the current
2009-10-30 21:37:34 -04:00
searcher are re-populated in the new searcher, enabling high cache hit
2006-02-24 21:51:19 -05:00
rates across index/searcher changes.< / li >
< / ul >
< / li >
< li > Fast/small filter implementation< / li >
< li > User level caching with autowarming support< / li >
< / ul >
2011-06-22 06:49:19 -04:00
< a name = "N1011F" > < / a > < a name = "Replication" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Replication< / h3 >
< ul >
2009-10-30 21:37:34 -04:00
< li > Efficient distribution of index parts that have changed< / li >
2006-02-24 21:51:19 -05:00
< li > Pull strategy allows for easy addition of searchers< / li >
< li > Configurable distribution interval allows tradeoff between timeliness and cache utilization< / li >
2009-10-30 21:37:34 -04:00
< li > Replication and automatic reloading of configuration files< / li >
2006-02-24 21:51:19 -05:00
< / ul >
2011-06-22 06:49:19 -04:00
< a name = "N10134" > < / a > < a name = "Admin+Interface" > < / a >
2006-02-24 21:51:19 -05:00
< h3 class = "boxed" > Admin Interface< / h3 >
< ul >
< li > Comprehensive statistics on cache utilization, updates, and queries< / li >
2009-10-30 21:37:34 -04:00
< li > Interactive schema browser that includes index statistics< / li >
< li > Replication monitoring< / li >
< li > Full logging control< / li >
2006-02-24 21:51:19 -05:00
< li > Text analysis debugger, showing result of every stage in an analyzer< / li >
< li > Web Query Interface w/ debugging output
< ul >
< li > parsed query output< / li >
< li > Lucene explain() document score detailing< / li >
< li > explain score for documents outside of the requested range to debug why a given document wasn't ranked higher.< / li >
< / ul >
< / li >
< / ul >
< / div >
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end content
+-->
2006-02-24 21:51:19 -05:00
< div class = "clearboth" > < / div >
< / div >
< div id = "footer" >
2007-06-06 23:17:18 -04:00
<!-- +
|start bottomstrip
+-->
2006-02-24 21:51:19 -05:00
< div class = "lastmodified" >
< script type = "text/javascript" > < ! - -
2007-06-06 23:17:18 -04:00
document.write("Last Published: " + document.lastModified);
2006-02-24 21:51:19 -05:00
// -->< / script >
< / div >
< div class = "copyright" >
Copyright ©
2007-01-18 00:10:35 -05:00
2007 < a href = "http://www.apache.org/licenses/" > The Apache Software Foundation.< / a >
2006-02-24 21:51:19 -05:00
< / div >
2007-06-06 23:17:18 -04:00
<!-- +
|end bottomstrip
+-->
2006-02-24 21:51:19 -05:00
< / div >
< / body >
< / html >