blob: c6d0e442946923d1007c358aeaf8c8c728cab756 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta charset="UTF-8" />
<title>SMILA/Documentation/Solr - Eclipsepedia</title>
<meta http-equiv="X-UA-Compatible" content="IE=EDGE" />
<meta name="generator" content="MediaWiki 1.23.2" />
<link rel="shortcut icon" href="http://wiki.eclipse.org/eclipse.org-common/themes/solstice/public/images/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml" href="http://wiki.eclipse.org/opensearch_desc.php" title="Eclipsepedia (en)" />
<link rel="EditURI" type="application/rsd+xml" href="http://wiki.eclipse.org/api.php?action=rsd" />
<link rel="alternate" type="application/atom+xml" title="Eclipsepedia Atom feed" href="http://wiki.eclipse.org/index.php?title=Special:RecentChanges&amp;feed=atom" />
<link rel="stylesheet" href="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=mediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.ui.button&amp;only=styles&amp;skin=solstice&amp;*" />
<link rel="stylesheet" href="http://wiki.eclipse.org/skins/solstice/public/stylesheets/styles.min.css?303" media="screen, print" /><meta name="ResourceLoaderDynamicStyles" content="" />
<style>a:lang(ar),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}
/* cache key: my_wiki:resourceloader:filter:minify-css:7:14ece53a42aa314864e5fd8c57f0d98f */</style>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=startup&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"SMILA/Documentation/Solr","wgTitle":"SMILA/Documentation/Solr","wgCurRevisionId":374419,"wgRevisionId":374419,"wgArticleId":32450,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"SMILA/Documentation/Solr","wgIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgWikiEditorEnabledModules":{"toolbar":false,"dialogs":false,"hidesig":true,"preview":false,"previewDialog":false,"publish":false},"wgCategoryTreePageCategoryOptions":"{\"mode\":0,\"hideprefix\":20,\"showcount\":true,\"namespaces\":false}"});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function($,jQuery){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"editfont":"default","editondblclick":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":1,"extendwatchlist":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nickname":"","norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"rcdays":7,"rclimit":50,"rows":25,"showhiddencats":0,"shownumberswatching":1,"showtoolbar":1,"skin":"solstice","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":1,"watchdefault":1,"watchdeletion":0,"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,
"useeditwarning":1,"prefershttps":1,"language":"en","variant-gan":"gan","variant-iu":"iu","variant-kk":"kk","variant-ku":"ku","variant-shi":"shi","variant-sr":"sr","variant-tg":"tg","variant-uz":"uz","variant-zh":"zh","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"variant":"en"});},{},{});mw.loader.implement("user.tokens",function($,jQuery){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});},{},{});
/* cache key: my_wiki:resourceloader:filter:minify-js:7:70d74423d3fc1e1c18fa9a1ff645a84a */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
line-height: normal; border: 0px none white;
}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for text
* CSS class: source-text, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
* --------------------------------------
*/
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }
/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-xml {line-height: normal;}
.source-xml li, .source-xml pre {
line-height: normal; border: 0px none white;
}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for xml
* CSS class: source-xml, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
* --------------------------------------
*/
.xml.source-xml .de1, .xml.source-xml .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.xml.source-xml {font-family:monospace;}
.xml.source-xml .imp {font-weight: bold; color: red;}
.xml.source-xml li, .xml.source-xml .li1 {font-weight: normal; vertical-align:top;}
.xml.source-xml .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.xml.source-xml .li2 {font-weight: bold; vertical-align:top;}
.xml.source-xml .es0 {color: #000099; font-weight: bold;}
.xml.source-xml .br0 {color: #66cc66;}
.xml.source-xml .sy0 {color: #66cc66;}
.xml.source-xml .st0 {color: #ff0000;}
.xml.source-xml .nu0 {color: #cc66cc;}
.xml.source-xml .sc-1 {color: #808080; font-style: italic;}
.xml.source-xml .sc0 {color: #00bbdd;}
.xml.source-xml .sc1 {color: #ddbb00;}
.xml.source-xml .sc2 {color: #339933;}
.xml.source-xml .sc3 {color: #009900;}
.xml.source-xml .re0 {color: #000066;}
.xml.source-xml .re1 {color: #000000; font-weight: bold;}
.xml.source-xml .re2 {color: #000000; font-weight: bold;}
.xml.source-xml .ln-xtra, .xml.source-xml li.ln-xtra, .xml.source-xml div.ln-xtra {background-color: #ffc;}
.xml.source-xml span.xtra { display:block; }
/*]]>*/
</style><style type="text/css">/*<![CDATA[*/
.source-java {line-height: normal;}
.source-java li, .source-java pre {
line-height: normal; border: 0px none white;
}
/**
* GeSHi Dynamically Generated Stylesheet
* --------------------------------------
* Dynamically generated stylesheet for java
* CSS class: source-java, CSS id:
* GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
* (http://qbnz.com/highlighter/ and http://geshi.org/)
* --------------------------------------
*/
.java.source-java .de1, .java.source-java .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.java.source-java {font-family:monospace;}
.java.source-java .imp {font-weight: bold; color: red;}
.java.source-java li, .java.source-java .li1 {font-weight: normal; vertical-align:top;}
.java.source-java .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.java.source-java .li2 {font-weight: bold; vertical-align:top;}
.java.source-java .kw1 {color: #7F0055; font-weight: bold;}
.java.source-java .kw2 {color: #7F0055; font-weight: bold;}
.java.source-java .kw3 {color: #000000; font-weight: normal}
.java.source-java .kw4 {color: #7F0055; font-weight: bold;}
.java.source-java .co1 {color: #3F7F5F; font-style: italic;}
.java.source-java .co2 {color: #3F7F5F;}
.java.source-java .co3 {color: #3F7F5F; font-style: italic; font-weight: bold;}
.java.source-java .coMULTI {color: #3F5FBF; font-style: italic;}
.java.source-java .es0 {color: #000000;}
.java.source-java .br0 {color: #000000;}
.java.source-java .sy0 {color: #000000;}
.java.source-java .st0 {color: #2A00ff;}
.java.source-java .nu0 {color: #000000;}
.java.source-java .me1 {color: #000000;}
.java.source-java .me2 {color: #000000;}
.java.source-java .ln-xtra, .java.source-java li.ln-xtra, .java.source-java div.ln-xtra {background-color: #ffc;}
.java.source-java span.xtra { display:block; }
/*]]>*/
</style><meta name="viewport" content="width=device-width, initial-scale=1.0"></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-SMILA_Documentation_Solr skin-solstice action-view" id="solstice">
<a class="sr-only" href="Solr.html#content">Skip to main content</a>
<div class="thin-header">
<header role="banner" class="hidden-print noprint">
<div class="container-fluid">
<div id="row-logo-search">
<div id="header-left">
<div class="row">
<div class="hidden-xs col-sm-6 logo-container">
<a href="https://www.eclipse.org/" ><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia"></a>
</div>
<div class="navbar col-sm-18 yamm" id="main-menu">
<div class="navbar-collapse collapse" id="navbar-collapse-1">
<ul class="nav navbar-nav">
<li><a target="_self" href="https://eclipse.org/downloads/">Download</a></li>
<li><a target="_self" href="https://eclipse.org/users/">Getting Started </a></li>
<li><a target="_self" href="https://eclipse.org/membership/">Members</a></li>
<li><a target="_self" href="https://eclipse.org/projects/">Projects</a></li>
<li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Solr.html#">Community <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Solr.html#">Participate <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul></li><li class="dropdown visible-xs"><a class="dropdown-toggle" data-toggle="dropdown" href="Solr.html#">Working Groups <b class="caret"></b></a><ul class="dropdown-menu"><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul></li><!-- More -->
<li class="dropdown hidden-xs"><a class="dropdown-toggle" data-toggle="dropdown">More<b class="caret"></b></a>
<ul class="dropdown-menu">
<li>
<!-- Content container to add padding -->
<div class="yamm-content">
<div class="row">
<ul class="col-sm-8 list-unstyled"><li><p><strong>Community</strong></p></li><li><a href="http://marketplace.eclipse.org">Marketplace</a></li><li><a href="http://events.eclipse.org">Events</a></li><li><a href="http://www.planeteclipse.org/">Planet Eclipse</a></li><li><a href="https://eclipse.org/community/eclipse_newsletter/">Newsletter</a></li><li><a href="https://www.youtube.com/user/EclipseFdn">Videos</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Participate</strong></p></li><li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li><li><a href="https://eclipse.org/forums/">Forums</a></li><li><a href="https://eclipse.org/mail/">Mailing Lists</a></li><li><a href="https://wiki.eclipse.org/">Wiki</a></li><li><a href="https://wiki.eclipse.org/IRC">IRC</a></li><li><a href="https://eclipse.org/contribute/">How to Contribute</a></li></ul><ul class="col-sm-8 list-unstyled"><li><p><strong>Working Groups</strong></p></li><li><a href="http://wiki.eclipse.org/Auto_IWG">Automotive</a></li><li><a href="http://iot.eclipse.org">Internet of Things</a></li><li><a href="http://locationtech.org">LocationTech</a></li><li><a href="http://lts.eclipse.org">Long-Term Support</a></li><li><a href="http://polarsys.org">PolarSys</a></li><li><a href="http://science.eclipse.org">Science</a></li><li><a href="http://openmdm.org">OpenMDM</a></li></ul> </div>
</div>
</li>
</ul>
</li>
</ul>
</div>
<div class="navbar-header">
<button data-target="#navbar-collapse-1" data-toggle="collapse" class="navbar-toggle" type="button">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="https://www.eclipse.org/" class="visible-xs navbar-brand"><img class="logo-eclipse-default" src="http://wiki.eclipse.org/skins/solstice/public/images/logo/eclipse-800x188.png" alt="Eclipsepedia" width="174"></a>
</div>
</div>
</div>
</div>
</div>
</div>
</header>
<section class="defaut-breadcrumbs hidden-print noprint hidden-print clearfix" id="breadcrumb">
<div>
<ol class="breadcrumb">
<li><a href="https://www.eclipse.org/">Home</a></li>
<li><a href="http://wiki.eclipse.org/Main_Page">Eclipse Wiki</a></li>
<li class="active">SMILA/Documentation/Solr</li></ol>
</div>
</section>
</div>
<div class="toolbar-menu breadcrumbs-offset noprint hidden-print margin-bottom-0 clearfix">
<div class="col-md-24">
<ol class="breadcrumb" role="navigation">
<li id="pt-login">
<a href="http://wiki.eclipse.org/index.php?title=Special:UserLogin&amp;returnto=SMILA%2FDocumentation%2FSolr">
<i class="fa fa-sign-in fa-fw orange"></i> Log in </a>
</li>
</ul>
</div>
</div>
<main role="main" class="background-grey">
<div class="container-full padding-top-25">
<!-- content -->
<section id="content" class="mw-body container-full clearfix 0">
<div id="mw-js-message" style="display:none;"></div>
<!-- bodyContent -->
<div id="bodyContent">
<!-- jumpto -->
<div id="jump-to-nav" class="mw-jump">
Jump to: <a href="Solr.html#mw-head">navigation</a>,
<a href="Solr.html#p-search">search</a>
</div>
<!-- /jumpto -->
<!-- leftcol -->
<aside class="col-md-4 noprint hidden-print" id="leftcol">
<form class="input-group" role="form" id="form-eclipse-search" action="http://wiki.eclipse.org/index.php" id="searchform">
<input id="searchInput" class="search-query form-control" type="search" accesskey="f" title="Special:Search" placeholder="Search" name="search" value="">
<span class="input-group-btn">
<button value="search" id="mw-searchButton" type="submit" class="btn btn-default" title="Search the pages for this text" name="fulltext">
<i class="fa fa-search"></i>
</button>
</span>
</form>
<select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Navigation---</span></option><option value="/Main_Page">Main Page</option><option value="/Eclipsepedia:Community_portal">Community portal</option><option value="/Eclipsepedia:Current_events">Current events</option><option value="/Special:RecentChanges">Recent changes</option><option value="/Special:Random">Random page</option><option value="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents">Help</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Navigation</span></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Main_Page" id="n-mainpage" title="Visit the main page [z]" accesskey="z">Main Page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Community_portal" id="n-portal" title="About the project, what you can do, where to find things">Community portal</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Eclipsepedia:Current_events" id="n-currentevents" title="Find background information on current events">Current events</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChanges" id="n-recentchanges" title="A list of recent changes in the wiki [r]" accesskey="r">Recent changes</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:Random" id="n-randompage" title="Load a random page [x]" accesskey="x">Random page</a></li> <li class=""><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents" id="n-help" title="The place to find out">Help</a></li></ul> <select class="form-control margin-top-10 margin-bottom-10 visible-xs visible-sm" onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);"><option class="fw-700 "><span class="fw-700">---Toolbox---</span></option><option value="/index.php?title=SMILA/Documentation/Solr&amp;action=info">Page information</option><option value="/index.php?title=SMILA/Documentation/Solr&amp;oldid=374419">Permanent link</option><option value="/index.php?title=SMILA/Documentation/Solr&amp;printable=yes">Printable version</option><option value="/Special:SpecialPages">Special pages</option><option value="/Special:RecentChangesLinked/SMILA/Documentation/Solr">Related changes</option><option value="/Special:WhatLinksHere/SMILA/Documentation/Solr">What links here</option></select><ul class="ul-left-nav fa-ul hidden-print leftnav hidden-xs hidden-sm"><li class="separator"><span class="separator">Toolbox</span></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;action=info" id="t-info">Page information</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;oldid=374419" id="t-permalink" title="Permanent link to this revision of the page">Permanent link</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;printable=yes" id="t-print" rel="alternate" title="Printable version of this page [p]" accesskey="p">Printable version</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:SpecialPages" id="t-specialpages" title="A list of all special pages [q]" accesskey="q">Special pages</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:RecentChangesLinked/SMILA/Documentation/Solr" id="t-recentchangeslinked" title="Recent changes in pages linked from this page [k]" accesskey="k">Related changes</a></li><li><i class="fa fa-angle-double-right orange fa-fw"></i> <a href="http://wiki.eclipse.org/Special:WhatLinksHere/SMILA/Documentation/Solr" id="t-whatlinkshere" title="A list of all wiki pages that link here [j]" accesskey="j">What links here</a></li></ul> </aside>
<!-- /leftcol -->
<!-- mainContent -->
<div id="mainContent" class="col-md-20">
<ul class="nav nav-tabs noprint hidden-print" role="tablist">
<li id="ca-nstab-main" class="active"><a href="Solr.html" title="View the content page [c]" accesskey="c" tabindex="-1">Page</a></li>
<li id="ca-talk"><a href="http://wiki.eclipse.org/Talk:SMILA/Documentation/Solr" title="Discussion about the content page [t]" accesskey="t" tabindex="-1">Discussion</a></li>
<li id="ca-viewsource"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;action=edit" title="This page is protected.&#10;You can view its source [e]" accesskey="e" tabindex="-1">View source</a></li>
<li id="ca-history" class="collapsible"><a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;action=history" title="Past revisions of this page [h]" accesskey="h" tabindex="-1">History</a></li>
</ul> <div class="tab-content background-white">
<div id="tab-pane-main-page-content" class="tab-pane active">
<h1 id="firstHeading" class="firstHeading page-header">
<span dir="auto">SMILA/Documentation/Solr</span>
</h1>
<div id="main-page-content">
<!-- subtitle -->
<div id="contentSub" class="alert alert-small alert-warning"><span class="subpages">&lt; <a href="../../SMILA.html" title="SMILA">SMILA</a>&lrm; | <a href="../Documentation.1.html" title="SMILA/Documentation">Documentation</a></span></div>
<!-- /subtitle -->
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><p>Solr is an open source search server based on the Lucene search engine. In addition to a powerful full-text-search, sorting and filtering, Solr comes with a lot of built-in features like highlighting, facets, auto-suggest and spell checking.
</p>
<div class="messagebox" style="background-color: #def3fe; border: 1px solid #c5d7e0; color: black; padding: 5px; margin: 1ex 0; min-height: 35px; padding-left: 45px;">
<div style="float: left; margin-left: -40px;"><a href="http://wiki.eclipse.org/File:Note.png" class="image"><img alt="Note.png" src="http://wiki.eclipse.org/images/c/cc/Note.png" width="35" height="35" /></a></div>
<div><b>The current implementation is a Work In Progress. The goal is to use this implementation as the default search implementation for SMILA replacing the current embedded Lucene integration. As a consequence things are likely to change in future versions. So stay tuned.</b><br /></div>
</div>
<p><br />
</p>
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="Solr.html#SolrServerManager_.26_SolrProperties"><span class="tocnumber">1</span> <span class="toctext">SolrServerManager &amp; SolrProperties</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="Solr.html#Configuration"><span class="tocnumber">2</span> <span class="toctext">Configuration</span></a>
<ul>
<li class="toclevel-2 tocsection-3"><a href="Solr.html#DefaultCore"><span class="tocnumber">2.1</span> <span class="toctext">DefaultCore</span></a>
<ul>
<li class="toclevel-3 tocsection-4"><a href="Solr.html#schema.xml"><span class="tocnumber">2.1.1</span> <span class="toctext">schema.xml</span></a></li>
<li class="toclevel-3 tocsection-5"><a href="Solr.html#solrconfig.xml"><span class="tocnumber">2.1.2</span> <span class="toctext">solrconfig.xml</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-6"><a href="Solr.html#Setup_another_core"><span class="tocnumber">2.2</span> <span class="toctext">Setup another core</span></a></li>
</ul>
</li>
<li class="toclevel-1 tocsection-7"><a href="Solr.html#How_to_use_Solr_with_SMILA"><span class="tocnumber">3</span> <span class="toctext">How to use Solr with SMILA</span></a>
<ul>
<li class="toclevel-2 tocsection-8"><a href="Solr.html#Indexing_data"><span class="tocnumber">3.1</span> <span class="toctext">Indexing data</span></a></li>
<li class="toclevel-2 tocsection-9"><a href="Solr.html#Search"><span class="tocnumber">3.2</span> <span class="toctext">Search</span></a></li>
<li class="toclevel-2 tocsection-10"><a href="Solr.html#Search_Pipelet_Config"><span class="tocnumber">3.3</span> <span class="toctext">Search Pipelet Config</span></a></li>
<li class="toclevel-2 tocsection-11"><a href="Solr.html#Solr_Specific_Search_Record"><span class="tocnumber">3.4</span> <span class="toctext">Solr Specific Search Record</span></a>
<ul>
<li class="toclevel-3 tocsection-12"><a href="Solr.html#Standard_Parameters"><span class="tocnumber">3.4.1</span> <span class="toctext">Standard Parameters</span></a></li>
<li class="toclevel-3 tocsection-13"><a href="Solr.html#Highlighting"><span class="tocnumber">3.4.2</span> <span class="toctext">Highlighting</span></a></li>
<li class="toclevel-3 tocsection-14"><a href="Solr.html#Facets"><span class="tocnumber">3.4.3</span> <span class="toctext">Facets</span></a></li>
<li class="toclevel-3 tocsection-15"><a href="Solr.html#Solr_Specific_Parameters_.28_solr.query.29"><span class="tocnumber">3.4.4</span> <span class="toctext">Solr Specific Parameters (_solr.query)</span></a>
<ul>
<li class="toclevel-4 tocsection-16"><a href="Solr.html#Filters"><span class="tocnumber">3.4.4.1</span> <span class="toctext">Filters</span></a></li>
<li class="toclevel-4 tocsection-17"><a href="Solr.html#Shards"><span class="tocnumber">3.4.4.2</span> <span class="toctext">Shards</span></a></li>
<li class="toclevel-4 tocsection-18"><a href="Solr.html#Solr_Request_Handler"><span class="tocnumber">3.4.4.3</span> <span class="toctext">Solr Request Handler</span></a></li>
<li class="toclevel-4 tocsection-19"><a href="Solr.html#SolrQueryBuilder"><span class="tocnumber">3.4.4.4</span> <span class="toctext">SolrQueryBuilder</span></a></li>
</ul>
</li>
<li class="toclevel-3 tocsection-20"><a href="Solr.html#Auxillary_Search_Functions"><span class="tocnumber">3.4.5</span> <span class="toctext">Auxillary Search Functions</span></a>
<ul>
<li class="toclevel-4 tocsection-21"><a href="Solr.html#Auto-suggest.2FTerms"><span class="tocnumber">3.4.5.1</span> <span class="toctext">Auto-suggest/Terms</span></a></li>
<li class="toclevel-4 tocsection-22"><a href="Solr.html#Spellcheck_.28Did_you_mean.29"><span class="tocnumber">3.4.5.2</span> <span class="toctext">Spellcheck (Did you mean)</span></a></li>
<li class="toclevel-4 tocsection-23"><a href="Solr.html#More_Like_This_.2F_What.27s_related"><span class="tocnumber">3.4.5.3</span> <span class="toctext">More Like This / What's related</span></a>
<ul>
<li class="toclevel-5 tocsection-24"><a href="Solr.html#MLT_Results_w.2Fo_Handler"><span class="tocnumber">3.4.5.3.1</span> <span class="toctext">MLT Results w/o Handler</span></a></li>
<li class="toclevel-5 tocsection-25"><a href="Solr.html#MLT_Results_with_Handler"><span class="tocnumber">3.4.5.3.2</span> <span class="toctext">MLT Results with Handler</span></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<h1><span class="mw-headline" id="SolrServerManager_.26_SolrProperties">SolrServerManager &amp; SolrProperties</span></h1>
<p>Solr can run as stand alone remote server as well as embedded server within SMILA. There exist a properties file to control the running mode: <tt>configuration/org.eclipse.smila.solr/solr.properties</tt>
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="text source-text"><pre class="de1">##### If true SMILA load default configuration for an embedded Solr instance (see below) #####
solr.embedded=true
&#160;
##### Alternative workspace folder equals solr.home (embedded only) #####
solr.workspaceFolder=./workspace/.metadata/.plugins/org.eclipse.smila.solr
&#160;
##### Server url for http connections to Solr server (remote only) #####
solr.serverUrl=http://localhost:8983/solr</pre></div></div>
<h1><span class="mw-headline" id="Configuration">Configuration</span></h1>
<p>SMILA supports Solr only in multicore setup ("core" is the solr word for a search index), regardless whether Solr runs embedded or remote.
</p>
<h2><span class="mw-headline" id="DefaultCore">DefaultCore</span></h2>
<p>The default configuration included in SMILA is defined in <tt>configuration/org.eclipse.smila.solr</tt>. The default mode is 'embedded' in which case SMILA starts up its own internal solr server. The full solr multicore configuration which is present in the configuration folder is used when the mode is set to <span style="font-family:monospace;">embedded</span>. This setup defines the sole DefaultCore holding that is suitable for the HowTo cases in SMILA.
</p><p>If SMILA should connect to an already running Solr server instead of starting up an own instance, the property <span style="font-family:monospace;">solr.embedded</span> must be set to <span style="font-family:monospace;">false</span>. In that case the URL to connect to the (external) Solr server URL has to be provided by setting the property <span style="font-family:monospace;">solr.serverUrl</span> in the properties file.
</p><p>Please note that you have to add the <tt>PingRequestHandler</tt> in each cores <tt>solrconfig.xml</tt> file, see <a href="Solr.html#solrconfig.xml">section solrconfig.xml</a>
</p><p>More information about solr cores and their configuration can be found at: <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/CoreAdmin">http://wiki.apache.org/solr/CoreAdmin</a>
</p><p>If SMILA starts up for the first time and Solr is configured embedded, the configuration is copied to Solr workspace (solr.home).
</p>
<h3><span class="mw-headline" id="schema.xml">schema.xml</span></h3>
<p>One of the most import configuration files is <tt>configuration/org.eclipse.smila.solr/DefaultCore/conf/schema.xml</tt>. This file defines index fields and types. SMILA comes with the following set of predefined fields:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Id&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;string_id&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">required</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;LastModifiedDate&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;date&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Filename&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;text_path&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termVectors</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termPositions</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termOffsets</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Path&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;text_path&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termVectors</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termPositions</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termOffsets</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Extension&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;textgen&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Size&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;MimeType&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;textgen&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Content&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;textgen&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termVectors</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termPositions</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termOffsets</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;Title&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;textgen&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termVectors</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termPositions</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">termOffsets</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;field</span> <span class="re0">name</span>=<span class="st0">&quot;spell&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;textSpell&quot;</span> <span class="re0">indexed</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">stored</span>=<span class="st0">&quot;true&quot;</span> <span class="re0">multiValued</span>=<span class="st0">&quot;true&quot;</span> <span class="re2">/&gt;</span></span></pre></div></div>
<p>The schema.xml also contains the <b>uniqueKey</b> property which Solr needs to know what field is used to id the documents and transparently handles add/updated accordingly. By default it is set to <b>Id</b>.
</p><p>Information about other configuration possibilities like field types, default search field, copy fields and many more can be found here: <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/SchemaXml">http://wiki.apache.org/solr/SchemaXml</a>
</p>
<h3><span class="mw-headline" id="solrconfig.xml">solrconfig.xml</span></h3>
<p>Another major configuration file is <tt>configuration/org.eclipse.smila.solr/DefaultCore/conf/solfconfig.xml</tt>. This is the configuration for all SearchComponents, RequestHandlers and the general indexing and query configuration.
</p><p>Please refer to its documentation here: <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/SolrConfigXml">http://wiki.apache.org/solr/SolrConfigXml</a>
</p><p>Important for SMILA is that in the embedded case the <b>dataDir</b> property defaults to the data/ sub folder of the core instance (e.i. <tt>solr.home/DefaultCore/data/</tt>. Hence, in embedded mode the SMILA workspace may grow quite large. Use this property in this file or set it through solr.xml at the core to provide an alternative location.
</p><p>SMILA uses <b>autoCommit</b> via solr.DirectUpdateHandler2. It tells Solr to commit automatically every 60 seconds or after 1000 documents were added. If this property is not set, no commit will occur and the indexed data will not be persistent or search-able unless you send appropriate solr commands yourself. The values are a compromise where these factors play a role:
</p>
<ul>
<li> how soon shall/must a user that searches see the updates?
</li>
<li> how many update request are sent to solr?
</li>
</ul>
<p>Note, that during commit the solr server stalls updates which might lead to index pipelet timeouts.
</p><p>Note that when using an external Solr server, you have to add the PingRequestHandler since this handler is required by the SolrAdminHttpHandler to check if the cores exist and are alive before adressing them. You have to add the handler to each core's configuration file:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;requestHandler</span> <span class="re0">name</span>=<span class="st0">&quot;/admin/ping&quot;</span> <span class="re0">class</span>=<span class="st0">&quot;PingRequestHandler&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;lst</span> <span class="re0">name</span>=<span class="st0">&quot;defaults&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;str</span> <span class="re0">name</span>=<span class="st0">&quot;qt&quot;</span><span class="re2">&gt;</span></span>standard<span class="sc3"><span class="re1">&lt;/str<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;str</span> <span class="re0">name</span>=<span class="st0">&quot;q&quot;</span><span class="re2">&gt;</span></span>solrpingquery<span class="sc3"><span class="re1">&lt;/str<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;str</span> <span class="re0">name</span>=<span class="st0">&quot;echoParams&quot;</span><span class="re2">&gt;</span></span>all<span class="sc3"><span class="re1">&lt;/str<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/lst<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/requestHandler<span class="re2">&gt;</span></span></span></pre></div></div>
<h2><span class="mw-headline" id="Setup_another_core">Setup another core</span></h2>
<p>If you don't want to use the default solr index (<tt>DefaultCore</tt>), you can easily setup your own core. Just copy the <tt>DefaultCore</tt> configuration folder (see <tt>SMILA/configuration/org.eclipse.smila.solr</tt>) with another name, e.g. <tt>MyCore</tt>, in the same directory and adapt the configuration files described before to your needs.
</p><p>Afterwards add your new core to the file <tt>SMILA.application/configuration/org.eclipse.smila.solr/solr.xml</tt>:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">'1.0'</span> <span class="re0">encoding</span>=<span class="st0">'UTF-8'</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;solr</span> <span class="re0">persistent</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;cores</span> <span class="re0">adminPath</span>=<span class="st0">&quot;/admin/cores&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;core</span> <span class="re0">name</span>=<span class="st0">&quot;DefaultCore&quot;</span> <span class="re0">instanceDir</span>=<span class="st0">&quot;DefaultCore&quot;</span><span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;core</span> <span class="re0">name</span>=<span class="st0">&quot;MyCore&quot;</span> <span class="re0">instanceDir</span>=<span class="st0">&quot;MyCore&quot;</span><span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;/cores<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/solr<span class="re2">&gt;</span></span></span></pre></div></div>
<h1><span class="mw-headline" id="How_to_use_Solr_with_SMILA">How to use Solr with SMILA</span></h1>
<h2><span class="mw-headline" id="Indexing_data">Indexing data</span></h2>
<p>The SolrIndexPipelet can add, update or delete records (equates to Solr documents) in an index.
</p><p>Configuration in addpipeline:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"> <span class="sc3"><span class="re1">&lt;extensionActivity<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;proc:invokePipelet</span> <span class="re0">name</span>=<span class="st0">&quot;SolrIndexPipelet&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:pipelet</span> <span class="re0">class</span>=<span class="st0">&quot;org.eclipse.smila.solr.index.SolrIndexPipelet&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:variables</span> <span class="re0">input</span>=<span class="st0">&quot;request&quot;</span> <span class="re0">output</span>=<span class="st0">&quot;request&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- either ADD or DELETE. --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;ExecutionMode&quot;</span><span class="re2">&gt;</span></span>ADD<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- defines the default core into which the record will be written. optional, but if missing then the target core </span>
<span class="sc-1"> must be set in the record via SolrConstants.DYNAMIC_TARGET_CORE --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;CoreName&quot;</span><span class="re2">&gt;</span></span>DefaultCore<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- seq of fields that are to be filled. each tuple is a map that defines the target core field, the source field </span>
<span class="sc-1"> (optional) and the source type (optional ) --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Seq</span> <span class="re0">key</span>=<span class="st0">&quot;CoreFields&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;rec:Map<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- target field name in the solr core --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;FieldName&quot;</span><span class="re2">&gt;</span></span>Folder<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- name of the source attribute or attachment in the record. optional, defaults to the target field name --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;RecSourceName&quot;</span><span class="re2">&gt;</span></span>Path<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- either ATTRIBUTE or ATTACHMENT. optional, defaults to ATTIRBUTE. --&gt;</span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;RecSourceType&quot;</span><span class="re2">&gt;</span></span>ATTRIBUTE<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/rec:Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;rec:Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;FieldName&quot;</span><span class="re2">&gt;</span></span>Filename<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/rec:Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/rec:Seq<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:invokePipelet<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/extensionActivity<span class="re2">&gt;</span></span></span></pre></div></div>
<p>Configuration in deletepipeline:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"> <span class="sc3"><span class="re1">&lt;extensionActivity<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;proc:invokePipelet</span> <span class="re0">name</span>=<span class="st0">&quot;SolrIndexPipelet&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:pipelet</span> <span class="re0">class</span>=<span class="st0">&quot;org.eclipse.smila.solr.index.SolrIndexPipelet&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:variables</span> <span class="re0">input</span>=<span class="st0">&quot;request&quot;</span> <span class="re0">output</span>=<span class="st0">&quot;request&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;ExecutionMode&quot;</span><span class="re2">&gt;</span></span>DELETE<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;rec:Val</span> <span class="re0">key</span>=<span class="st0">&quot;CoreName&quot;</span><span class="re2">&gt;</span></span>DefaultCore<span class="sc3"><span class="re1">&lt;/rec:Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:invokePipelet<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/extensionActivity<span class="re2">&gt;</span></span></span></pre></div></div>
<h2><span class="mw-headline" id="Search">Search</span></h2>
<p>The SMILA standard search servlet already uses solr to search via the SolrSearchPipelet since SMILA version 1.0. Up to version 0.9 the SMILA standard search servlet used plain lucene search.
</p>
<h2><span class="mw-headline" id="Search_Pipelet_Config">Search Pipelet Config</span></h2>
<p>The SolrSearchPipelet offers the possibility to search a Solr index. The pipelet needs only a small configuration without any special parameters.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"> <span class="sc3"><span class="re1">&lt;extensionActivity<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;proc:invokePipelet</span> <span class="re0">name</span>=<span class="st0">&quot;invokeSolrSearchPipelet&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:pipelet</span> <span class="re0">class</span>=<span class="st0">&quot;org.eclipse.smila.solr.search.SolrSearchPipelet&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:variables</span> <span class="re0">input</span>=<span class="st0">&quot;request&quot;</span> <span class="re0">output</span>=<span class="st0">&quot;request&quot;</span> <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:configuration<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/proc:invokePipelet<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/extensionActivity<span class="re2">&gt;</span></span></span></pre></div></div>
<h2><span class="mw-headline" id="Solr_Specific_Search_Record">Solr Specific Search Record</span></h2>
<p>For full feature support an enhanced search record is required.
This sections will provide both, XML samples on how the features are configured in the search record as well as description on helper classes that are available from within SMILA. Path notations for the elements in the record just have their key names of the respective elements as the path element and always start from the root; e.g. <tt>_solr.params/highlighting</tt>.
</p><p>To understand the following section you must know the standard <a href="Search.html#Query_Parameters" title="SMILA/Documentation/Search">SMILA search record</a>
</p>
<h3><span class="mw-headline" id="Standard_Parameters">Standard Parameters</span></h3>
<p>The following SMILA standard query parameters are supported:
</p>
<ul>
<li> maxcount
</li>
<li> offset
</li>
<li> indexname, this must correspond to an existing solr core name
</li>
<li> resultAttributes
</li>
<li> query
</li>
</ul>
<p>The solr pipelet suports only a sole <tt>query</tt> element as a string value, which it passes unaltered to solr. The solr default handler assumes this to be a valid Lucene query string, but ultimately this depends on the configured handler. All escaping needs to be done by the one constructing the search record (Note: There is no need to URL encode it, as this is done internally).
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Record</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.eclipse.org/SMILA/record&quot;</span> <span class="re0">version</span>=<span class="st0">&quot;2.0&quot;</span><span class="re2">&gt;</span></span>
<span class="sc-1">&lt;!-- query (q) --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;query&quot;</span><span class="re2">&gt;</span></span>Content:solr Content:eclipse<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;maxcount&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>3<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;offset&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>3<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;indexname&quot;</span><span class="re2">&gt;</span></span>wikipedia<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;resultAttributes&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>Content<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>Id<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;Record<span class="re2">&gt;</span></span></span></pre></div></div>
<p>The above sample shows a query on the index field <tt>Content</tt> for the string "solr eclipse".
</p>
<h3><span class="mw-headline" id="Highlighting">Highlighting</span></h3>
<p>Highlighting for Solr deviates from the standard SMILA way to support solr features. The configuration is contained in <tt>_solr.query/highlighting</tt>
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
...
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;highlighting&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;attribute&quot;</span><span class="re2">&gt;</span></span>global.solr.params<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;hl&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;boolean&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- list of fields to be highlighted, space delimited --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;hl.fl&quot;</span><span class="re2">&gt;</span></span>Content Title<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;hl.simple.pre&quot;</span><span class="re2">&gt;</span></span><span class="sc1">&amp;lt;</span>b<span class="sc1">&amp;gt;</span><span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;hl.simple.post&quot;</span><span class="re2">&gt;</span></span><span class="sc1">&amp;lt;</span>/b<span class="sc1">&amp;gt;</span><span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- other maps with attribute = field name for per-field configuration --&gt;</span>
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span></pre></div></div>
<p>The configuration can be done globally (applies to all HL fields) as well as per field and are contained in maps that must have an entry <tt>attribute</tt> that either contains the value <tt>golabl.solr.params</tt> which then signifies the the global highlight settings or the name of the attribute/filed that is to be highlight-configured.
The other entries in this map correspond in name and values to the ones solr supports.
See <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/HighlightingParameters">http://wiki.apache.org/solr/HighlightingParameters</a>.
</p><p>In order to turn on highlighting, at least the global config must be present with the entry <tt>hl=true</tt>.
</p><p>Programmatic highlighting configuration is done though <tt>HihglightingQueryConfigAdapter</tt>. The default constructor creates a configuration object with global highlighting parameters which is required to enable highlighting. The other constructor provides an optional per-field configuration.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="java source-java"><pre class="de1"> <span class="co1">// create global highlighting configuration (required, enables highlighting)</span>
<span class="kw1">final</span> HighlightingQueryConfigAdapter highlighting <span class="sy0">=</span> <span class="kw1">new</span> HighlightingQueryConfigAdapter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
highlighting.<span class="me1">setHighlightingFields</span><span class="br0">&#40;</span><span class="st0">&quot;Content Title&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
highlighting.<span class="me1">setHighlightingSimplePre</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;b&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
highlighting.<span class="me1">setHighlightingSimplePost</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;/b&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
builder.<span class="me1">addHighlightingConfiguration</span><span class="br0">&#40;</span>highlighting<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<p>Other than in SMILA, the <tt>_highlight</tt> annotation is not created per result item but replaces the normally returned field value, i.e. when you have the <tt>Content</tt> field to be returned in your search and you also configured highlighting on it, then the search returns only the highlighted value for the <tt>Content</tt> field.
</p>
<h3><span class="mw-headline" id="Facets">Facets</span></h3>
<p>Facets are specified for solr through the <tt>/facetby</tt> Seq as defined in the standard. However, the following differences exist:
</p>
<ul>
<li> maxcount is optional
</li>
<li> solr doesn't support ordering of facets, so if this is set, then there is a warning in the log but otherwise ignored.
</li>
</ul>
<p>Faceting is turned on as soon as the <tt>facetby</tt> Seq is present.
</p><p>Note, that the attibute value must be the solr field-name as the mapping from the solrSearchPipelet is not applied.
</p><p>The values in the <tt>nativeParametes</tt> Map are passed to solr for the field verbatim after the pattern <tt>f.${attribute}.${key}=${value}</tt>. This allows you to just specify any valid solr parameter/value pair on field level without any interaction on our part.
Global facet parameters may be defined in the <tt>_solr.query</tt> map.
</p><p>Solr supports different kinds of faceting and this can be selected with the <tt>type</tt> parameter. It's value is solr's respective parameter name and is passed as given. No checks are performed here as to allow future methods OOB. However, it defaults to <tt>facet.field</tt> if missing. Solr's <tt>facet.query</tt> is not supported thru this structure ATM as it needs to be formulated quite differently and hence must be formulated as global parameters in the <tt>_solr.query</tt> map. Nontheless, the facets are retuned the normal way.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;facetby&quot;</span><span class="re2">&gt;</span></span>
<span class="sc-1">&lt;!-- per-field configuration for facet.field --&gt;</span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;type&quot;</span><span class="re2">&gt;</span></span>facet.field<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;maxcount&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>10<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;attribute&quot;</span><span class="re2">&gt;</span></span>Extension<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc-1">&lt;!-- per-field configuration for facet.date --&gt;</span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;type&quot;</span><span class="re2">&gt;</span></span>facet.date<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;attribute&quot;</span><span class="re2">&gt;</span></span>LastModifiedDate<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;nativeParameters&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;facet.date.start&quot;</span><span class="re2">&gt;</span></span>NOW/DAY-5DAYS<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;facet.date.gap&quot;</span><span class="re2">&gt;</span></span>+1DAY<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;facet.date.end&quot;</span><span class="re2">&gt;</span></span>NOW/DAY+1DAY<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span></pre></div></div>
<p>Facets are returned the SMILA standard way in the <tt>facets</tt> map.
</p>
<h3><span class="mw-headline" id="Solr_Specific_Parameters_.28_solr.query.29">Solr Specific Parameters (_solr.query)</span></h3>
<p>Some configuration deviations from the SMILA standard and other solr specialties are put into a Solr specific <tt>_solr.query</tt> Map element at top level of the search record.
</p><p>The following are supported:
</p>
<ul>
<li> filters
</li>
<li> shards
</li>
<li> request handler
</li>
</ul>
<h4><span class="mw-headline" id="Filters">Filters</span></h4>
<p>Solr filters may only be specified directly, i.e. as native query strings via the <tt>fq</tt> element. Multiple ones will be automatically ANDed.
Note, that the QueryBuilder's methods to add filters and the <tt>/filter</tt> Seq are not supported (yet).
</p>
<h4><span class="mw-headline" id="Shards">Shards</span></h4>
<p>Shards are only supported in remote mode and may be defined through the <tt>_solr.query/shards</tt> Seq.
</p>
<h4><span class="mw-headline" id="Solr_Request_Handler">Solr Request Handler</span></h4>
<p>To select another solr request handler add the <tt>_solr.query/qt</tt> entry.
</p><p>The following XML snippet shall illustrate these cases:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Record</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.eclipse.org/SMILA/record&quot;</span> <span class="re0">version</span>=<span class="st0">&quot;2.0&quot;</span><span class="re2">&gt;</span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
<span class="sc-1">&lt;!-- filter query (fq) --&gt;</span>
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;fq&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>Size:[500 TO 1000]<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>Author:&quot;H. Simpson&quot;<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
&#160;
<span class="sc-1">&lt;!-- shards --&gt;</span>
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;shards&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>http://localhost:8983/solr<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>http://remote-server:8983/solr<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
&#160;
<span class="sc-1">&lt;!-- request handler (qt) --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;qt&quot;</span><span class="re2">&gt;</span></span>/custom<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
&#160;
<span class="sc3"><span class="re1">&lt;/Record<span class="re2">&gt;</span></span></span></pre></div></div>
<h4><span class="mw-headline" id="SolrQueryBuilder">SolrQueryBuilder</span></h4>
<p>Instead of assembling the XML/Record yourself you can use the <tt>SolrQueryBuilder</tt> from within SMILA. This class extends native <tt>QueryBuilder</tt> with methods to configure a Solr request and special Solr features like highlighting or facets. To configure additional Solr features there exist adapter classes which give an overview of possible parameters.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="java source-java"><pre class="de1"> <span class="co1">// create Solr specific query builder</span>
<span class="kw1">final</span> SolrQueryBuilder builder <span class="sy0">=</span> <span class="kw1">new</span> SolrQueryBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set query</span>
builder.<span class="me1">setQuery</span><span class="br0">&#40;</span><span class="st0">&quot;query&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set start (equals offset, default: 0)</span>
builder.<span class="me1">setStart</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set rows (equals max count, default: 10)</span>
builder.<span class="me1">setRows</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set fields (equals result attributes, default: Id, score)</span>
<span class="kw1">final</span> <span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> fl <span class="sy0">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;Path&quot;</span>, <span class="st0">&quot;Size&quot;</span>, <span class="st0">&quot;Content&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span>
builder.<span class="me1">addFields</span><span class="br0">&#40;</span>fl<span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// add a filter query (example: size between 500 and 1000)</span>
builder.<span class="me1">addFilterQuery</span><span class="br0">&#40;</span><span class="st0">&quot;Size:[500 TO 1000]&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set shards</span>
<span class="kw1">final</span> <span class="kw3">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> shards <span class="sy0">=</span> <span class="br0">&#123;</span> <span class="st0">&quot;http://localhost:8983/solr&quot;</span>, <span class="st0">&quot;http://remote-server:8983/solr&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span>
builder.<span class="me1">setShards</span><span class="br0">&#40;</span>shards<span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// set request handler</span>
builder.<span class="me1">setRequestHandler</span><span class="br0">&#40;</span><span class="st0">&quot;/terms&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<h3><span class="mw-headline" id="Auxillary_Search_Functions">Auxillary Search Functions</span></h3>
<h4><span class="mw-headline" id="Auto-suggest.2FTerms">Auto-suggest/Terms</span></h4>
<p>Auto suggest/completion is also done via a search request, albeit a very special, stripped down version, which looks like so in the default setup:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Record</span> <span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;terms&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;terms&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;boolean&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;terms.fl&quot;</span><span class="re2">&gt;</span></span>Content<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;terms.prefix&quot;</span><span class="re2">&gt;</span></span>con<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;qt&quot;</span><span class="re2">&gt;</span></span>/terms<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Record<span class="re2">&gt;</span></span></span></pre></div></div>
<p>The only items present have to be the <tt>terms</tt> map and <tt>qt</tt> entry that needs to be set to an appropriate handler (by default this is /terms). The entries in the <tt>terms</tt> map are passed as is to solr.
For more information about terms configuration and parameters see <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/TermsComponent">http://wiki.apache.org/solr/TermsComponent</a>.
</p><p>The results are returned in the <tt>_solr.result/terms</tt> map with the key as the actual completed word and its value tells you how many documents in the index contain this word.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Record</span> <span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;records&quot;</span><span class="re2">&gt;</span><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;runtime&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>3<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.result&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;terms&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;congratulations&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;conjugate&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;containing&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Record<span class="re2">&gt;</span></span></span></pre></div></div>
<p>In SMILA code this can be done like so:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="java source-java"><pre class="de1"> <span class="kw1">final</span> TermsQueryConfigAdapter terms <span class="sy0">=</span> <span class="kw1">new</span> TermsQueryConfigAdapter<span class="br0">&#40;</span>_solrField<span class="br0">&#41;</span><span class="sy0">;</span>
terms.<span class="me1">setTermsPrefix</span><span class="br0">&#40;</span><span class="st0">&quot;con&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
_queryBuilder.<span class="me1">setTermsConfiguration</span><span class="br0">&#40;</span>terms<span class="br0">&#41;</span><span class="sy0">;</span>
_queryBuilder.<span class="me1">setRequestHandler</span><span class="br0">&#40;</span><span class="st0">&quot;/terms&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<h4><span class="mw-headline" id="Spellcheck_.28Did_you_mean.29">Spellcheck (Did you mean)</span></h4>
<p>SIMLA's default setup has spell checking (Did you mean) for the <tt>Content</tt> field enabled. In most cases it's useful to configure the default request handler to use SpellCheckComponent (solrconfig.xml) and this has been done. Otherwise the correct request handler must be set (solrconfig.xml example: /spell). By default SpellCheckComponent uses a separate index which is created on the fly and updated on every commit. Therefore, to retrieve alternative suggestions for possibly misspelled input words, you just need to add the <tt>spellcheck</tt> map to <tt>_solr.query</tt>:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"> <span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
....
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;boolean&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck.count&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>5<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck.extendedResults&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;boolean&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck.collate&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;boolean&quot;</span><span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span></pre></div></div>
<p>The map contains solr parameters (see <a rel="nofollow" class="external free" href="http://wiki.apache.org/solr/SpellCheckComponent">http://wiki.apache.org/solr/SpellCheckComponent</a>) that are passed "as is" to solr.
</p><p>This will add the <tt>spellcheck</tt> map to <tt>_solr.result</tt>:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"> <span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.result&quot;</span><span class="re2">&gt;</span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;spellcheck&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;rust&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;just&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;bust&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;collation&quot;</span><span class="re2">&gt;</span></span>Content:just<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span></pre></div></div>
<p>For each misspelled word there is a nested map containing the corrections, where the key is the corrected term and the value is the frequency of the term in the index. The value for the frequency must be turned on via spellcheck.extendedResults and defaults to -1 otherwise.
</p><p>When <tt>collate</tt> is on then you can also find a full alternative query under the key <tt>collation</tt>.
</p><p>The code for the above XML snippets has been generated with the following code:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="java source-java"><pre class="de1"> addSolrDoc<span class="br0">&#40;</span><span class="st0">&quot;1&quot;</span>,
<span class="st0">&quot;This is a simple text without real meaning as i dont want to bust my behind for smth. with more sense.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
addSolrDoc<span class="br0">&#40;</span><span class="st0">&quot;2&quot;</span>, <span class="st0">&quot;It is just used for testing.&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
indexAndCommit<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&#160;
<span class="co1">// setup search</span>
<span class="kw1">final</span> SpellCheckQueryConfigAdapter spellcheck <span class="sy0">=</span> <span class="kw1">new</span> SpellCheckQueryConfigAdapter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
spellcheck.<span class="me1">setSpellCheckCount</span><span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span><span class="sy0">;</span>
spellcheck.<span class="me1">setSpellCheckExtendedResults</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
spellcheck.<span class="me1">setSpellCheckCollate</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
_queryBuilder.<span class="me1">setSpellCheckConfiguration</span><span class="br0">&#40;</span>spellcheck<span class="br0">&#41;</span><span class="sy0">;</span>
_queryBuilder.<span class="me1">setQuery</span><span class="br0">&#40;</span><span class="st0">&quot;Content:rust&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<h4><span class="mw-headline" id="More_Like_This_.2F_What.27s_related">More Like This / What's related</span></h4>
<p>Solr offers a feature to return <i>related</i> documents which is called in Solr <i>More Like This</i> (MLT). There are 2 modes supported:
</p>
<ol>
<li> return for all items in the SRL the top N related documents, see <a rel="nofollow" class="external autonumber" href="http://wiki.apache.org/Solr/MoreLikeThis">[1]</a>
</li>
<li> the other does this ad-hoc for just one document for which it uses an own request handler, see <a rel="nofollow" class="external autonumber" href="http://wiki.apache.org/Solr/MoreLikeThisHandler">[2]</a>
</li>
</ol>
<p>It is obvious that the first variant requires much more performance than the 2nd.
</p><p>Both modes are supported through SMILA and configured very similar. SMILA doesn't do anything special to the arguments you pass in with the record and hands them on to Solr as-is, except that it performes any necessary URL encoding for you. While you may assign specific data types to the parameters, this is not necessary and all values may be given as strings as this is what is being passed on to Solr anyhow.
</p><p>Which mode is active ultimatly depends on your handler configuration in solrconfig.xml. However, we will assume here SMILA's default setup which binds the MLT handler to <tt>/mlt</tt> and a normal query to <tt>/select</tt>.
</p><p>Both modes share most of the MLT parameters but also need/support specific ones.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;record<span class="re2">&gt;</span></span></span>
&#160;
<span class="sc-1">&lt;!-- this is the lucene query expression that is executed in both cases. --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;query&quot;</span><span class="re2">&gt;</span></span>euklid<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
<span class="sc-1">&lt;!-- this select the solr request handler. set it to /mlt when u want to use the MLT handler --&gt;</span>
<span class="sc-1">&lt;!-- &lt;Val key=&quot;qt&quot;&gt;/mlt&lt;/Val&gt; --&gt;</span>
<span class="sc-1">&lt;!-- determines the list of fields returned for both the normal results as well as the MLT results --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;fl&quot;</span> <span class="re2">&gt;</span></span>Id,score,Size<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;moreLikeThis&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;mlt&quot;</span> <span class="re2">&gt;</span></span>true<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;mlt.fl&quot;</span> <span class="re2">&gt;</span></span>Content<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;mlt.mindf&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;mlt.mintf&quot;</span><span class="re2">&gt;</span></span>1<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;record<span class="re2">&gt;</span></span></span></pre></div></div>
<p><br />
</p>
<h5><span class="mw-headline" id="MLT_Results_w.2Fo_Handler">MLT Results w/o Handler</span></h5>
<p>In this case solr will add the <tt>moreLikeThis</tt> section on the same level as the normal <tt>response</tt> section and you need to manually look up the MLT docs for each given result item. SMILA on the other hand transforms the solr result in that it converts the MLT information as a nested part of SMILA's result item, like so:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;records&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_recordid&quot;</span><span class="re2">&gt;</span></span>file:Euklid.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_weight&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.7635468<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_mlt.meta&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;start&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>0<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;count&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>3<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;max_score&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.8115930557250977<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">'_mlt'</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_recordid&quot;</span><span class="re2">&gt;</span></span>file:Archytas_von_Tarent_7185.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_weight&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.5511907<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Size&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>47934<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_recordid&quot;</span><span class="re2">&gt;</span></span>file:Aristoxenos.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_weight&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.44604447<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Size&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>39332<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span></pre></div></div>
<p>This sample contains the Solr result item with the id <tt>file:Euklid.html</tt>. With MLT turned on, it now contains a nested <tt>_mlt</tt> Seq which holds the N related docs for that result item each represented by a Map (MLT-Map) (yes, this prevents you from having a solr doc field of the same name and have it returned in this MLT mode). The Val elements in each MLT-Map are defined by the list of fields in the <tt>fl</tt> parameter. But how do the <tt>_recordid</tt> and <tt>_weight</tt> VALs get in there if the value is actually <tt>Id,score,Size</tt>? Well, SMILA defines the fields <tt>Id</tt> and <tt>score</tt> and automatically maps them to <tt>_recordid</tt> and <tt>_weight</tt>. Any other field that you include thru <tt>fl</tt> is added as a Val element to the MLT result item having the same key as the field name, as is shown for <i>Size</i> here.
There is also the <tt>_mlt.meta</tt> Map that contains result info regarding the MLT result, such as number of items, start (offset), and max_score. The keys of these values are the same as for the normal result.
</p>
<h5><span class="mw-headline" id="MLT_Results_with_Handler">MLT Results with Handler</span></h5>
<p>The more common use case of MLT is to actually return the related docs for just one document due to performance considerations. This is done by making a request against the MLT handler itself.
</p><p>The document for which you want the related docs is usually known, e.g. from a previous search and your rendered result list contains a link to fetch/show related docs. In this case the query just selects the given document by its Id ( as shown in the example below). But you also may provide any other query here. However, if the query returns &gt;1 docs it will select just one depending on the other MLT parameter and return only the related docs for that document.
</p><p>The differences to the query record above are like so:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;record<span class="re2">&gt;</span></span></span>
&#160;
<span class="sc-1">&lt;!-- this is the lucene query to select an document by its Id. Note, the escaping of the ID string! --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;query&quot;</span><span class="re2">&gt;</span></span>Id:file\:Euklid.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.query&quot;</span><span class="re2">&gt;</span></span>
<span class="sc-1">&lt;!-- this select the solr MLT request handler. --&gt;</span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;qt&quot;</span><span class="re2">&gt;</span></span>/mlt<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;record<span class="re2">&gt;</span></span></span></pre></div></div>
<p>The results for such an MLT request are contained in the standard <tt>records</tt> Seq the same way that normal search results are returned, except that they signify MLT docs.
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;records&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_recordid&quot;</span><span class="re2">&gt;</span></span>file:Archytas_von_Tarent_7185.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_weight&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.5511907<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Size&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>47934<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Map<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_recordid&quot;</span><span class="re2">&gt;</span></span>file:Aristoxenos.html<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;_weight&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>0.44604447<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Size&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;long&quot;</span><span class="re2">&gt;</span></span>39332<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span></pre></div></div>
<div class="messagebox" style="background-color: #def3fe; border: 1px solid #c5d7e0; color: black; padding: 5px; margin: 1ex 0; min-height: 35px; padding-left: 45px;">
<div style="float: left; margin-left: -40px;"><a href="http://wiki.eclipse.org/File:Note.png" class="image"><img alt="Note.png" src="http://wiki.eclipse.org/images/c/cc/Note.png" width="35" height="35" /></a></div>
<div><b> help wanted </b><br />due to lack of need, returning the mlt.interestingTerms has not been impl'ed yet</div>
</div>
<p><br />
In case of <tt>mlt.interestingTerms=details</tt> the result record will contain the following additional information:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.result&quot;</span><span class="re2">&gt;</span></span>
...
<span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;interestingTerms&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Content:euklid&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>1.0<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val</span> <span class="re0">key</span>=<span class="st0">&quot;Content:geometrie&quot;</span> <span class="re0">type</span>=<span class="st0">&quot;double&quot;</span><span class="re2">&gt;</span></span>1.0<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span></pre></div></div>
<p>or in case of <tt>mlt.interestingTerms=list</tt> just:
</p>
<div dir="ltr" class="mw-geshi mw-code mw-content-ltr"><div class="xml source-xml"><pre class="de1"><span class="sc3"><span class="re1">&lt;Map</span> <span class="re0">key</span>=<span class="st0">&quot;_solr.result&quot;</span><span class="re2">&gt;</span></span>
...
<span class="sc3"><span class="re1">&lt;Seq</span> <span class="re0">key</span>=<span class="st0">&quot;interestingTerms&quot;</span><span class="re2">&gt;</span></span>
&#160;
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>euklid<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;Val<span class="re2">&gt;</span></span></span>geometrie<span class="sc3"><span class="re1">&lt;/Val<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span>
...
<span class="sc3"><span class="re1">&lt;/Seq<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/Map<span class="re2">&gt;</span></span></span></pre></div></div>
<!--
NewPP limit report
CPU time usage: 0.516 seconds
Real time usage: 0.564 seconds
Preprocessor visited node count: 401/1000000
Preprocessor generated node count: 932/1000000
Post‐expand include size: 2421/2097152 bytes
Template argument size: 1181/2097152 bytes
Highest expansion depth: 5/40
Expensive parser function count: 0/100
-->
<!-- Saved in parser cache with key my_wiki:pcache:idhash:32450-0!*!0!!en!2!* and timestamp 20150414084514 and revision id 374419
-->
</div>
<!-- catlinks -->
<div id='catlinks' class='catlinks catlinks-allhidden'></div> <!-- /catlinks -->
</div>
</div>
</div>
</div>
<!-- /maincontent -->
<!-- printfooter -->
<div class="printfooter">
Retrieved from "<a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;oldid=374419">http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;oldid=374419</a>" </div>
<!-- /printfooter -->
<!-- debughtml -->
<!-- /debughtml -->
</div>
<!-- /bodyContent -->
</section>
<!-- /content -->
<!-- footer -->
</div> <section id="footer-contribution-info" style="border-top:1px solid #ccc;" class="footer-offset background-white margin-top-25"><div class="container text-center padding-top-10 padding-bottom-10"><p id="footercredit">This page was last modified 08:08, 1 December 2014 by <a href="http://wiki.eclipse.org/index.php?title=User:Julia.kudrin.empolis.com&amp;action=edit&amp;redlink=1" class="new" title="User:Julia.kudrin.empolis.com (page does not exist)">Julia Kudrin</a>. Based on work by <a href="http://wiki.eclipse.org/User:Tmenzel.brox.de" title="User:Tmenzel.brox.de">thomas menzel</a>, <a href="http://wiki.eclipse.org/User:Andreas.schank.attensity.com" title="User:Andreas.schank.attensity.com">A. Schank</a> and <a href="http://wiki.eclipse.org/index.php?title=User:Andreas.weber.attensity.com&amp;action=edit&amp;redlink=1" class="new" title="User:Andreas.weber.attensity.com (page does not exist)">Andreas Weber</a> and <a href="http://wiki.eclipse.org/index.php?title=SMILA/Documentation/Solr&amp;action=credits" title="SMILA/Documentation/Solr">others</a>.</p><p id="footerviews">This page has been accessed 6,105 times.</p></div></section> </main> <!-- /#main-content-container-row -->
<p id="back-to-top" class="noprint hidden-print">
<a class="visible-xs" href="Solr.html#top">Back to the top</a>
</p>
<footer role="contentinfo" class="noprint hidden-print">
<div class="container">
<div class="row">
<section id="footer-eclipse-foundation" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Eclipse Foundation</h2>
<ul class="nav">
<li><a href="https://eclipse.org/org/">About us</a></li>
<li><a href="https://eclipse.org/org/foundation/contact.php">Contact Us</a></li>
<li><a href="https://eclipse.org/donate">Donate</a></li>
<li><a href="https://eclipse.org/org/documents/">Governance</a></li>
<li><a href="https://eclipse.org/artwork/">Logo and Artwork</a></li>
<li><a href="https://eclipse.org/org/foundation/directors.php">Board of Directors</a></li>
</ul>
</section>
<section id="footer-legal" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Legal</h2>
<ul class="nav">
<li><a href="https://eclipse.org/legal/privacy.php">Privacy Policy</a></li>
<li><a href="https://eclipse.org/legal/termsofuse.php">Terms of Use</a></li>
<li><a href="https://eclipse.org/legal/copyright.php">Copyright Agent</a></li>
<li><a href="https://eclipse.org/org/documents/epl-v10.php">Eclipse Public License </a></li>
<li><a href="https://eclipse.org/legal/">Legal Resources </a></li>
</ul>
</section>
<section id="footer-useful-links" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Useful Links</h2>
<ul class="nav">
<li><a href="https://bugs.eclipse.org/bugs/">Report a Bug</a></li>
<li><a href="http://help.eclipse.org/">Documentation</a></li>
<li><a href="https://eclipse.org/contribute/">How to Contribute</a></li>
<li><a href="https://eclipse.org/mail/">Mailing Lists</a></li>
<li><a href="https://eclipse.org/forums/">Forums</a></li>
<li><a href="http://marketplace.eclipse.org/">Marketplace</a></li>
</ul>
</section>
<section id="footer-other" class="col-xs-offset-1 col-xs-11 col-sm-7 col-md-6 col-md-offset-0">
<h2 class="section-title">Other</h2>
<ul class="nav">
<li><a href="https://eclipse.org/ide/">IDE and Tools</a></li>
<li><a href="https://eclipse.org/projects">Community of Projects</a></li>
<li><a href="https://eclipse.org/org/workinggroups/">Working Groups</a></li>
</ul>
<ul class="list-inline social-media">
<li><a href="https://twitter.com/EclipseFdn"><i class="fa fa-twitter-square"></i></a></li>
<li><a href="https://plus.google.com/+Eclipse"><i class="fa fa-google-plus-square"></i></a></li>
<li><a href="https://www.facebook.com/eclipse.org"><i class="fa fa-facebook-square"></i> </a></li>
<li><a href="https://www.youtube.com/user/EclipseFdn"><i class="fa fa-youtube-square"></i></a></li>
</ul>
</section>
<div id="copyright" class="col-xs-offset-1 col-sm-14 col-md-24 col-md-offset-0">
<div>
<span><img src="http://eclipse.org/eclipse.org-common/themes/solstice/public/images/logo/eclipse-logo-bw-800x188.png" alt="Eclipse.org black and white logo" width="166" height="39" id="logo-eclipse-white"/></span>
<p id="copyright-text">Copyright &copy; 2014 The Eclipse Foundation. All Rights Reserved.</p>
</div>
</div>
<a href="Solr.html#" class="scrollup">Back to the top</a>
</div>
</div>
</footer>
<script src="http://wiki.eclipse.org/skins/solstice/public/javascript/main.min.js"></script>
<!-- Placed at the end of the document so the pages load faster -->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-910670-2']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script> <!-- /footer -->
<script>/*<![CDATA[*/window.jQuery && jQuery.ready();/*]]>*/</script><script>if(window.mw){
mw.loader.state({"skins.solstice":"loading","site":"ready","user":"ready","user.groups":"ready"});
}</script>
<script src="http://wiki.eclipse.org/load.php?debug=false&amp;lang=en&amp;modules=skins.solstice&amp;only=scripts&amp;skin=solstice&amp;*"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.hidpi","mediawiki.page.ready","mediawiki.searchSuggest"],null,true);
}</script>
<script>if(window.mw){
mw.config.set({"wgBackendResponseTime":400});
}</script> </body>
</html>