Skip to content

Instantly share code, notes, and snippets.

@lbdremy
Created July 31, 2014 00:06
Show Gist options
  • Save lbdremy/ca8304efdf3695d25767 to your computer and use it in GitHub Desktop.
Save lbdremy/ca8304efdf3695d25767 to your computer and use it in GitHub Desktop.
Test coverage solr-node-client
<!DOCTYPE html><html><head><title>Coverage</title><script>
headings = [];
onload = function(){
headings = document.querySelectorAll('h2');
};
onscroll = function(e){
var heading = find(window.scrollY);
if (!heading) return;
var links = document.querySelectorAll('#menu a')
, link;
for (var i = 0, len = links.length; i < len; ++i) {
link = links[i];
link.className = link.getAttribute('href') == '#' + heading.id
? 'active'
: '';
}
};
function find(y) {
var i = headings.length
, heading;
while (i--) {
heading = headings[i];
if (y >= heading.offsetTop) {
return heading;
}
}
}
</script>
<style>
body {
font: 14px/1.6 "Helvetica Neue", Helvetica, Arial, sans-serif;
margin: 0;
color: #2C2C2C;
border-top: 2px solid #ddd;
}
#coverage {
padding: 60px;
}
h1 a {
color: inherit;
font-weight: inherit;
}
h1 a:hover {
text-decoration: none;
}
.onload h1 {
opacity: 1;
}
h2 {
width: 80%;
margin-top: 80px;
margin-bottom: 0;
font-weight: 100;
letter-spacing: 1px;
border-bottom: 1px solid #eee;
}
a {
color: #8A6343;
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
ul {
margin-top: 20px;
padding: 0 15px;
width: 100%;
}
ul li {
float: left;
width: 40%;
margin-top: 5px;
margin-right: 60px;
list-style: none;
border-bottom: 1px solid #eee;
padding: 5px 0;
font-size: 12px;
}
ul::after {
content: '.';
height: 0;
display: block;
visibility: hidden;
clear: both;
}
code {
font: 12px monaco, monospace;
}
pre {
margin: 30px;
padding: 30px;
border: 1px solid #eee;
border-bottom-color: #ddd;
-webkit-border-radius: 2px;
-moz-border-radius: 2px;
border-radius: 2px;
-webkit-box-shadow: inset 0 0 10px #eee;
-moz-box-shadow: inset 0 0 10px #eee;
box-shadow: inset 0 0 10px #eee;
overflow-x: auto;
}
img {
margin: 30px;
padding: 1px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
-webkit-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
-moz-box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
box-shadow: 0 3px 10px #dedede, 0 1px 5px #888;
max-width: 100%;
}
footer {
background: #eee;
width: 100%;
padding: 50px 0;
text-align: right;
border-top: 1px solid #ddd;
}
footer span {
display: block;
margin-right: 30px;
color: #888;
font-size: 12px;
}
#menu {
position: fixed;
font-size: 12px;
overflow-y: auto;
top: 0;
right: 0;
margin: 0;
height: 100%;
padding: 15px 0;
text-align: right;
border-left: 1px solid #eee;
-moz-box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
-webkit-box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
box-shadow: 0 0 2px #888
, inset 5px 0 20px rgba(0,0,0,.5)
, inset 5px 0 3px rgba(0,0,0,.3);
-webkit-font-smoothing: antialiased;
background: url("data:image/png;base64,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");
}
#menu::after {
display: block;
content: '';
padding-top: 80px;
}
#logo {
position: fixed;
bottom: 10px;
right: 10px;
background: rgba(255,255,255,.1);
font-size: 11px;
display: block;
width: 20px;
height: 20px;
line-height: 20px;
text-align: center;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
border-radius: 20px;
-webkit-box-shadow: 0 0 3px rgba(0,0,0,.2);
-moz-box-shadow: 0 0 3px rgba(0,0,0,.2);
box-shadow: 0 0 3px rgba(0,0,0,.2);
color: inherit;
}
#menu li a {
display: block;
color: white;
padding: 0 35px 0 25px;
-webkit-transition: background 300ms;
-moz-transition: background 300ms;
}
#menu li {
position: relative;
list-style: none;
}
#menu a:hover,
#menu a.active {
text-decoration: none;
background: rgba(255,255,255,.1);
}
#menu li:hover .cov {
opacity: 1;
}
#menu li .dirname {
opacity: .60;
padding-right: 2px;
}
#menu li .basename {
opacity: 1;
}
#menu .cov {
background: rgba(0,0,0,.4);
position: absolute;
top: 0;
right: 8px;
font-size: 9px;
opacity: .6;
text-align: left;
width: 17px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
padding: 2px 3px;
text-align: center;
}
#stats:nth-child(2n) {
display: inline-block;
margin-top: 15px;
border: 1px solid #eee;
padding: 10px;
-webkit-box-shadow: inset 0 0 2px #eee;
-moz-box-shadow: inset 0 0 2px #eee;
box-shadow: inset 0 0 2px #eee;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
}
#stats div {
float: left;
padding: 0 5px;
}
#stats::after {
display: block;
content: '';
clear: both;
}
#stats .sloc::after {
content: ' SLOC';
color: #b6b6b6;
}
#stats .percentage::after {
content: ' coverage';
color: #b6b6b6;
}
#stats .hits,
#stats .misses {
display: none;
}
.high {
color: #00d4b4;
}
.medium {
color: #e87d0d;
}
.low {
color: #d4081a;
}
.terrible {
color: #d4081a;
font-weight: bold;
}
table {
width: 80%;
margin-top: 10px;
border-collapse: collapse;
border: 1px solid #cbcbcb;
color: #363636;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
border-radius: 3px;
}
table thead {
display: none;
}
table td.line,
table td.hits {
width: 20px;
background: #eaeaea;
text-align: center;
font-size: 11px;
padding: 0 10px;
color: #949494;
}
table td.hits {
width: 10px;
padding: 2px 5px;
color: rgba(0,0,0,.2);
background: #f0f0f0;
}
tr.miss td.line,
tr.miss td.hits {
background: #e6c3c7;
}
tr.miss td {
background: #f8d5d8;
}
td.source {
padding-left: 15px;
line-height: 15px;
white-space: pre;
font: 12px monaco, monospace;
}
code .comment { color: #ddd }
code .init { color: #2F6FAD }
code .string { color: #5890AD }
code .keyword { color: #8A6343 }
code .number { color: #2F6FAD }
</style></head><body><div id="coverage"><h1 id="overview">Coverage</h1><div id="menu"><li><a href="#overview">overview</a></li><li><span class="cov high">100</span><a href="#error/solr-error.js"><span class="dirname">error/</span><span class="basename">solr-error.js</span></a></li><li><span class="cov high">75</span><a href="#query.js"><span class="basename">query.js</span></a></li><li><span class="cov high">83</span><a href="#solr.js"><span class="basename">solr.js</span></a></li><li><span class="cov high">83</span><a href="#utils/format.js"><span class="dirname">utils/</span><span class="basename">format.js</span></a></li><a id="logo" href="http://visionmedia.github.io/mocha/">m</a></div><div id="stats" class="high"><div class="percentage">80%</div><div class="sloc">486</div><div class="hits">389</div><div class="misses">97</div></div><div id="files"><div class="file"><h2 id="error/solr-error.js">error/solr-error.js</h2><div id="stats" class="high"><div class="percentage">100%</div><div class="sloc">14</div><div class="hits">14</div><div class="misses">0</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr><td class="line">1</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> * Expose `SolrError`</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">5</td><td class="hits">1</td><td class="source">module.exports = SolrError;</td></tr><tr><td class="line">6</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> * Create a new `SolrError`</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> * @constructor</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> * @return {SolrError}</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">13</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">15</td><td class="hits">1</td><td class="source">function SolrError(statusCode,htmlMessage){</td></tr><tr class="hit"><td class="line">16</td><td class="hits">3</td><td class="source"> Error.call(this);</td></tr><tr class="hit"><td class="line">17</td><td class="hits">3</td><td class="source"> Error.captureStackTrace(this,arguments.callee);</td></tr><tr class="hit"><td class="line">18</td><td class="hits">3</td><td class="source"> this.name = 'SolrError';</td></tr><tr class="hit"><td class="line">19</td><td class="hits">3</td><td class="source"> var errorReason = '';</td></tr><tr class="hit"><td class="line">20</td><td class="hits">3</td><td class="source"> if(htmlMessage){</td></tr><tr class="hit"><td class="line">21</td><td class="hits">3</td><td class="source"> var matches = htmlMessage.match(/&lt;pre&gt;([\s\S]+)&lt;\/pre&gt;/);</td></tr><tr class="hit"><td class="line">22</td><td class="hits">3</td><td class="source"> errorReason = decode((matches || ['', htmlMessage])[1].trim());</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">24</td><td class="hits">3</td><td class="source"> this.message = 'HTTP status ' + statusCode + '.Reason: ' + errorReason;</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">27</td><td class="hits">1</td><td class="source">SolrError.prototype.__proto__ = Error.prototype;</td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> * Decode few HTML entities: &amp;&lt;&gt;'&quot;</td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> * @param {String} str -</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">37</td><td class="hits">1</td><td class="source">function decode(str) {</td></tr><tr class="hit"><td class="line">38</td><td class="hits">3</td><td class="source"> return str.replace(/&amp;amp;/g,'&amp;')</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> .replace(/&amp;lt;/gm, '&lt;')</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> .replace(/&amp;gt;/gm, '&gt;')</td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source"> .replace(/&amp;apos;/gm, '\'')</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source"> .replace(/&amp;quot;/gm, '&quot;');</td></tr><tr class="hit"><td class="line">43</td><td class="hits">1</td><td class="source">};</td></tr></tbody></table></div><div class="file"><h2 id="query.js">query.js</h2><div id="stats" class="high"><div class="percentage">75%</div><div class="sloc">244</div><div class="hits">185</div><div class="misses">59</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr><td class="line">1</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> * Load dependencies</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">4</td><td class="hits">1</td><td class="source">var querystring = require('querystring'),</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source"> format = require('./utils/format');</td></tr><tr><td class="line">6</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> * Expose `Query`</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">11</td><td class="hits">1</td><td class="source">module.exports = exports = Query;</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">13</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> * Create a new `Query`</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> * @constructor</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">18</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">21</td><td class="hits">1</td><td class="source">function Query(){</td></tr><tr class="hit"><td class="line">22</td><td class="hits">20</td><td class="source"> this.parameters = [];</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> * Set a new parameter</td></tr><tr><td class="line">27</td><td class="hits"></td><td class="source"> * Since all possibilities provided by Solr are not available in the `Query` object, `set()` is there to fit this gap.</td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> * @param {String} parameter - string, special characters have to be correctly encoded or the request will fail.</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> * @return {Query} - allow chaining</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">34</td><td class="hits">1</td><td class="source">Query.prototype.set = function(parameter){</td></tr><tr class="hit"><td class="line">35</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">36</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">37</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">41</td><td class="hits"></td><td class="source"> * Set the query parser to use with this request.</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source"> * @param {String} type - name of the query parser e.g: 'dismax'</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">49</td><td class="hits">1</td><td class="source">Query.prototype.defType = function(type){</td></tr><tr class="hit"><td class="line">50</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">51</td><td class="hits">2</td><td class="source"> var parameter = 'defType=' + type;</td></tr><tr class="hit"><td class="line">52</td><td class="hits">2</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">53</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">54</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> * Set the Request Handler used to process the request based on its `name`.</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> * Works only if no Request Handler has been configured with `/select` as its name in solrconfig.xml.</td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">60</td><td class="hits"></td><td class="source"> * @param {String} name - name of the Request Handler</td></tr><tr><td class="line">61</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">62</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">64</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">65</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">66</td><td class="hits">1</td><td class="source">Query.prototype.requestHandler =</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source">Query.prototype.qt = function(name){</td></tr><tr class="miss"><td class="line">68</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">69</td><td class="hits">0</td><td class="source"> var parameter = 'qt=' + name;</td></tr><tr class="miss"><td class="line">70</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">71</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">73</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">74</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source"> * Set the main query</td></tr><tr><td class="line">76</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">77</td><td class="hits"></td><td class="source"> * @param {String|Object} q -</td></tr><tr><td class="line">78</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">79</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">80</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">81</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">82</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">83</td><td class="hits">1</td><td class="source">Query.prototype.q = function(q){</td></tr><tr class="hit"><td class="line">84</td><td class="hits">18</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">85</td><td class="hits">18</td><td class="source"> var parameter ='q=';</td></tr><tr class="hit"><td class="line">86</td><td class="hits">18</td><td class="source"> if ( typeof(q) === 'string' ){</td></tr><tr class="hit"><td class="line">87</td><td class="hits">12</td><td class="source"> parameter += encodeURIComponent(q);</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">89</td><td class="hits">6</td><td class="source"> parameter += querystring.stringify(q, '%20AND%20',':');</td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">91</td><td class="hits">18</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">92</td><td class="hits">18</td><td class="source"> return self;</td></tr><tr><td class="line">93</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">94</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">95</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">96</td><td class="hits"></td><td class="source"> * Set the default query operator</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> * @param {String} op -</td></tr><tr><td class="line">99</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">100</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">101</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">102</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">103</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">104</td><td class="hits">1</td><td class="source">Query.prototype.qop = function(op){</td></tr><tr class="hit"><td class="line">105</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">106</td><td class="hits">1</td><td class="source"> var parameter ='q.op=';</td></tr><tr class="hit"><td class="line">107</td><td class="hits">1</td><td class="source"> parameter += op;</td></tr><tr class="hit"><td class="line">108</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">109</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">110</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">111</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">112</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">113</td><td class="hits"></td><td class="source"> * Set the offset where the set of returned documents should begin.</td></tr><tr><td class="line">114</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source"> * @param {Number} start - the offset where the set of returned documents should begin.</td></tr><tr><td class="line">116</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">117</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">118</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">119</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">120</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">121</td><td class="hits">1</td><td class="source">Query.prototype.start = function(start){</td></tr><tr class="hit"><td class="line">122</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">123</td><td class="hits">2</td><td class="source"> var parameter = 'start=' + start ;</td></tr><tr class="hit"><td class="line">124</td><td class="hits">2</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">125</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">126</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">127</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">128</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">129</td><td class="hits"></td><td class="source"> * Set the maximum number of documents returned</td></tr><tr><td class="line">130</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">131</td><td class="hits"></td><td class="source"> * @param {Number} rows - number of documents</td></tr><tr><td class="line">132</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">133</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">134</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">135</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">136</td><td class="hits">1</td><td class="source">Query.prototype.rows = function(rows){</td></tr><tr class="hit"><td class="line">137</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">138</td><td class="hits">1</td><td class="source"> var parameter = 'rows=' + rows ;</td></tr><tr class="hit"><td class="line">139</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">140</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">141</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">144</td><td class="hits"></td><td class="source"> * Request to use cursorMarks for deep-paging as explained in http://heliosearch.org/solr/paging-and-deep-paging/</td></tr><tr><td class="line">145</td><td class="hits"></td><td class="source"> * Note that usage of a cursor requires a sort containing a uniqueKey field tie breaker</td></tr><tr><td class="line">146</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">147</td><td class="hits"></td><td class="source"> * @param {String} mark - The mark to use, defaults to &quot;*&quot; to request a new cursor in the first request</td></tr><tr><td class="line">148</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">149</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">150</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">151</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">152</td><td class="hits">1</td><td class="source">Query.prototype.cursorMark = function(mark){</td></tr><tr class="hit"><td class="line">153</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">154</td><td class="hits">1</td><td class="source"> mark = mark || &quot;*&quot;;</td></tr><tr class="hit"><td class="line">155</td><td class="hits">1</td><td class="source"> var parameter = 'cursorMark=' + mark ;</td></tr><tr class="hit"><td class="line">156</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">157</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">158</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">159</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">160</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">161</td><td class="hits"></td><td class="source"> * Sort a result in descending or ascending order based on one or more fields.</td></tr><tr><td class="line">162</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">163</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">164</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">165</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">166</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">167</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">168</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">169</td><td class="hits">1</td><td class="source">Query.prototype.sort = function(options){</td></tr><tr class="hit"><td class="line">170</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">171</td><td class="hits">2</td><td class="source"> var parameter = 'sort=';</td></tr><tr class="hit"><td class="line">172</td><td class="hits">2</td><td class="source"> parameter += querystring.stringify(options, ',' , '%20');</td></tr><tr class="hit"><td class="line">173</td><td class="hits">2</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">174</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">175</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">176</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">177</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">178</td><td class="hits"></td><td class="source"> * Filter the set of documents found before to return the result with the given range determined by `field`, `start` and `end`.</td></tr><tr><td class="line">179</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">180</td><td class="hits"></td><td class="source"> * @param {Array|Object} options -</td></tr><tr><td class="line">181</td><td class="hits"></td><td class="source"> * @param {String} options.field - the name of the field where the range is applied</td></tr><tr><td class="line">182</td><td class="hits"></td><td class="source"> * @param {String|Number|Date} options.start - the offset where the range starts</td></tr><tr><td class="line">183</td><td class="hits"></td><td class="source"> * @param {String|Number|Date} options.end - the offset where the range ends</td></tr><tr><td class="line">184</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">185</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">186</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">187</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">188</td><td class="hits"></td><td class="source"> * @example</td></tr><tr><td class="line">189</td><td class="hits"></td><td class="source"> * var query = client.createQuery();</td></tr><tr><td class="line">190</td><td class="hits"></td><td class="source"> * query.q({ '*' : '*' }).rangeFilter({ field : 'id', start : 100, end : 200})</td></tr><tr><td class="line">191</td><td class="hits"></td><td class="source"> * // also works</td></tr><tr><td class="line">192</td><td class="hits"></td><td class="source"> * query.q({ '*' : '*' }).rangeFilter([{ field : 'id', start : 100, end : 200},{ field : 'date', start : new Date(), end : new Date() - 3600}]);</td></tr><tr><td class="line">193</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">194</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">195</td><td class="hits">1</td><td class="source">Query.prototype.rangeFilter = function(options){</td></tr><tr class="hit"><td class="line">196</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">197</td><td class="hits">1</td><td class="source"> options = format.dateISOify(options);</td></tr><tr class="hit"><td class="line">198</td><td class="hits">1</td><td class="source"> var parameter = 'fq=';</td></tr><tr class="hit"><td class="line">199</td><td class="hits">1</td><td class="source"> if(Array.isArray(options)){</td></tr><tr class="miss"><td class="line">200</td><td class="hits">0</td><td class="source"> parameter += &quot;(&quot;;</td></tr><tr class="miss"><td class="line">201</td><td class="hits">0</td><td class="source"> var filters = options.map(function(option){</td></tr><tr class="miss"><td class="line">202</td><td class="hits">0</td><td class="source"> var key = option.field;</td></tr><tr class="miss"><td class="line">203</td><td class="hits">0</td><td class="source"> var filter = {};</td></tr><tr class="miss"><td class="line">204</td><td class="hits">0</td><td class="source"> filter[key] = '[' + format.escapeAndEncode(option.start) + '%20TO%20' + format.escapeAndEncode(option.end) + ']';</td></tr><tr class="miss"><td class="line">205</td><td class="hits">0</td><td class="source"> return format.stringify(filter, '',':');</td></tr><tr><td class="line">206</td><td class="hits"></td><td class="source"> });</td></tr><tr class="miss"><td class="line">207</td><td class="hits">0</td><td class="source"> parameter += filters.join('%20AND%20');</td></tr><tr class="miss"><td class="line">208</td><td class="hits">0</td><td class="source"> parameter += &quot;)&quot;;</td></tr><tr><td class="line">209</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">210</td><td class="hits">1</td><td class="source"> var key = options.field;</td></tr><tr class="hit"><td class="line">211</td><td class="hits">1</td><td class="source"> var filter = {};</td></tr><tr class="hit"><td class="line">212</td><td class="hits">1</td><td class="source"> filter[key] = '[' + format.escapeAndEncode(options.start) + '%20TO%20' + format.escapeAndEncode(options.end) + ']';</td></tr><tr class="hit"><td class="line">213</td><td class="hits">1</td><td class="source"> parameter += format.stringify(filter, '',':');</td></tr><tr><td class="line">214</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">215</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">216</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">217</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">218</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">219</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">220</td><td class="hits"></td><td class="source"> * Filter the set of documents found before to return the result with the given `field` and `value`.</td></tr><tr><td class="line">221</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">222</td><td class="hits"></td><td class="source"> * @param {String} field - name of field</td></tr><tr><td class="line">223</td><td class="hits"></td><td class="source"> * @param {String|Number|Date} value - value of the field that must match</td></tr><tr><td class="line">224</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">225</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">226</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">227</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">228</td><td class="hits"></td><td class="source"> * @example</td></tr><tr><td class="line">229</td><td class="hits"></td><td class="source"> * var query = client.createQuery();</td></tr><tr><td class="line">230</td><td class="hits"></td><td class="source"> * query.q({ '*' : '*' }).matchFilter('id', 100)</td></tr><tr><td class="line">231</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">232</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">233</td><td class="hits">1</td><td class="source">Query.prototype.matchFilter = function(field,value){</td></tr><tr class="hit"><td class="line">234</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">235</td><td class="hits">2</td><td class="source"> value = format.dateISOify(value);</td></tr><tr class="hit"><td class="line">236</td><td class="hits">2</td><td class="source"> var parameter = 'fq=';</td></tr><tr class="hit"><td class="line">237</td><td class="hits">2</td><td class="source"> parameter += field + ':' + format.escapeAndEncode(value);</td></tr><tr class="hit"><td class="line">238</td><td class="hits">2</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">239</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">240</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">241</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">242</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">243</td><td class="hits"></td><td class="source"> * Specify a set of fields to return.</td></tr><tr><td class="line">244</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">245</td><td class="hits"></td><td class="source"> * @param {String|Array} field - field name</td></tr><tr><td class="line">246</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">247</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">248</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">249</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">250</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">251</td><td class="hits">1</td><td class="source">Query.prototype.fl =</td></tr><tr><td class="line">252</td><td class="hits"></td><td class="source">Query.prototype.restrict = function(fields){</td></tr><tr class="hit"><td class="line">253</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">254</td><td class="hits">1</td><td class="source"> var parameter = 'fl=';</td></tr><tr class="hit"><td class="line">255</td><td class="hits">1</td><td class="source"> if(typeof(fields) === 'string'){</td></tr><tr class="miss"><td class="line">256</td><td class="hits">0</td><td class="source"> parameter += fields;</td></tr><tr><td class="line">257</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">258</td><td class="hits">1</td><td class="source"> parameter += fields.join(',');</td></tr><tr><td class="line">259</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">260</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">261</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">262</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">263</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">264</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">265</td><td class="hits"></td><td class="source"> * Set the time allowed for a search to finish.</td></tr><tr><td class="line">266</td><td class="hits"></td><td class="source"> * Partial results may be returned (if there are any).</td></tr><tr><td class="line">267</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">268</td><td class="hits"></td><td class="source"> * @param {String|Number} time - time is in milliseconds. Values &lt;= 0 mean no time restriction.</td></tr><tr><td class="line">269</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">270</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">271</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">272</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">273</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">274</td><td class="hits">1</td><td class="source">Query.prototype.timeout = function(time){</td></tr><tr class="hit"><td class="line">275</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">276</td><td class="hits">1</td><td class="source"> var parameter = 'timeAllowed=' + time;</td></tr><tr class="hit"><td class="line">277</td><td class="hits">1</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="hit"><td class="line">278</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">279</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">280</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">281</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">282</td><td class="hits"></td><td class="source"> * Group documents with the given `field`</td></tr><tr><td class="line">283</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">284</td><td class="hits"></td><td class="source"> * @param {String} field - field name</td></tr><tr><td class="line">285</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">286</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">287</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">288</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">289</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">290</td><td class="hits">1</td><td class="source">Query.prototype.groupBy = function(field){</td></tr><tr class="hit"><td class="line">291</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">292</td><td class="hits">1</td><td class="source"> this.group({</td></tr><tr><td class="line">293</td><td class="hits"></td><td class="source"> 'field': field</td></tr><tr><td class="line">294</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">295</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">296</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">297</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">298</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">299</td><td class="hits"></td><td class="source"> * Group documents using field collapsing or result grouping feature.</td></tr><tr><td class="line">300</td><td class="hits"></td><td class="source"> * Field Collapsing collapses a group of results with the same field value down to a single (or fixed number) of entries.</td></tr><tr><td class="line">301</td><td class="hits"></td><td class="source"> * Result Grouping groups documents with a common field value into groups, returning the top documents per group, and the top groups based on what documents are in the groups.</td></tr><tr><td class="line">302</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">303</td><td class="hits"></td><td class="source"> * @param {Object} options</td></tr><tr><td class="line">304</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.on=true] - if false, turn off result grouping, otherwise turn on.</td></tr><tr><td class="line">305</td><td class="hits"></td><td class="source"> * @param {String|Array} options.field - Group based on the unique values of a field.</td></tr><tr><td class="line">306</td><td class="hits"></td><td class="source"> * @param {Number} [options.limit=1] - The number of results (documents) to return for each group. Solr's default value is 1.</td></tr><tr><td class="line">307</td><td class="hits"></td><td class="source"> * @param {Number} options.offset - The offset into the document list of each group.</td></tr><tr><td class="line">308</td><td class="hits"></td><td class="source"> * @param {String} [options.sort=&quot;score desc&quot;] - How to sort documents within a single group. Defaults to the same value as the sort parameter.</td></tr><tr><td class="line">309</td><td class="hits"></td><td class="source"> * @param {String} options.format - if simple, the grouped documents are presented in a single flat list. The start and rows parameters refer to numbers of documents instead of numbers of groups.</td></tr><tr><td class="line">310</td><td class="hits"></td><td class="source"> * @param {Boolean} options.main - If true, the result of the last field grouping command is used as the main result list in the response, using group.format=simple.</td></tr><tr><td class="line">311</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.ngroups=false] - If true, includes the number of groups that have matched the query. Default is false.</td></tr><tr><td class="line">312</td><td class="hits"></td><td class="source"> * @param {Boolean} options.truncate - If true, facet counts are based on the most relevant document of each group matching the query. Same applies for StatsComponent. Default is false.</td></tr><tr><td class="line">313</td><td class="hits"></td><td class="source"> * @param {Number} [options.cache=0] - If &gt; 0 enables grouping cache. Grouping is executed actual two searches. This option caches the second search. A value of 0 disables grouping caching. Default is 0.</td></tr><tr><td class="line">314</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">315</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">316</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">317</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">318</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">319</td><td class="hits">1</td><td class="source">Query.prototype.group = function(options){</td></tr><tr class="hit"><td class="line">320</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">321</td><td class="hits">2</td><td class="source"> if(options.on === false){</td></tr><tr class="miss"><td class="line">322</td><td class="hits">0</td><td class="source"> this.parameters.push('group=false');</td></tr><tr><td class="line">323</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">324</td><td class="hits">2</td><td class="source"> this.parameters.push('group=true');</td></tr><tr><td class="line">325</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">326</td><td class="hits">2</td><td class="source"> if( options.field ){</td></tr><tr class="hit"><td class="line">327</td><td class="hits">2</td><td class="source"> if(!Array.isArray(options.field)){</td></tr><tr class="hit"><td class="line">328</td><td class="hits">2</td><td class="source"> options.field = [options.field];</td></tr><tr><td class="line">329</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">330</td><td class="hits">2</td><td class="source"> options.field.forEach(function(field){</td></tr><tr class="hit"><td class="line">331</td><td class="hits">2</td><td class="source"> self.parameters.push('group.field=' + field);</td></tr><tr><td class="line">332</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">333</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">334</td><td class="hits">2</td><td class="source"> if( options.limit !== undefined){</td></tr><tr class="hit"><td class="line">335</td><td class="hits">1</td><td class="source"> this.parameters.push('group.limit=' + options.limit);</td></tr><tr><td class="line">336</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">337</td><td class="hits">2</td><td class="source"> if( options.offset !== undefined){</td></tr><tr class="hit"><td class="line">338</td><td class="hits">1</td><td class="source"> this.parameters.push('group.offset=' + options.offset);</td></tr><tr><td class="line">339</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">340</td><td class="hits">2</td><td class="source"> if( options.sort ){</td></tr><tr class="hit"><td class="line">341</td><td class="hits">1</td><td class="source"> this.parameters.push('group.sort=' + encodeURIComponent(options.sort));</td></tr><tr><td class="line">342</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">343</td><td class="hits">2</td><td class="source"> if( options.format ){</td></tr><tr class="hit"><td class="line">344</td><td class="hits">1</td><td class="source"> this.parameters.push('group.format=' + format.escapeAndEncode(options.format));</td></tr><tr><td class="line">345</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">346</td><td class="hits">2</td><td class="source"> if( options.main !== undefined){</td></tr><tr class="hit"><td class="line">347</td><td class="hits">1</td><td class="source"> this.parameters.push('group.main=' + options.main);</td></tr><tr><td class="line">348</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">349</td><td class="hits">2</td><td class="source"> if( options.ngroups !== undefined){</td></tr><tr class="hit"><td class="line">350</td><td class="hits">1</td><td class="source"> this.parameters.push('group.ngroups=' + options.ngroups);</td></tr><tr><td class="line">351</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">352</td><td class="hits">2</td><td class="source"> if( options.truncate !== undefined){</td></tr><tr class="hit"><td class="line">353</td><td class="hits">1</td><td class="source"> this.parameters.push('group.truncate=' + options.truncate);</td></tr><tr><td class="line">354</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">355</td><td class="hits">2</td><td class="source"> if( options.cache !== undefined){</td></tr><tr class="hit"><td class="line">356</td><td class="hits">1</td><td class="source"> this.parameters.push('group.cache.percent=' + options.cache);</td></tr><tr><td class="line">357</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">358</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">359</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">360</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">361</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">362</td><td class="hits"></td><td class="source"> * Create a facet</td></tr><tr><td class="line">363</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">364</td><td class="hits"></td><td class="source"> * @param {Object} options - set of options to create a facet</td></tr><tr><td class="line">365</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.on=true] - Turn on or off facet</td></tr><tr><td class="line">366</td><td class="hits"></td><td class="source"> * @param {String} [options.query] - This parameter allows you to specify an arbitrary query in the Lucene default syntax to generate a facet count. By default, faceting returns a count of the unique terms for a &quot;field&quot;, while facet.query allows you to determine counts for arbitrary terms or expressions.</td></tr><tr><td class="line">367</td><td class="hits"></td><td class="source"> * @param {String|Array} options.field - This parameter allows you to specify a field which should be treated as a facet. It will iterate over each Term in the field and generate a facet count using that Term as the constraint. Multiple fields can be defined providing an array instead of a string.</td></tr><tr><td class="line">368</td><td class="hits"></td><td class="source"> * @param {String} [options.prefix] - Limits the terms on which to facet to those starting with the given string prefix.</td></tr><tr><td class="line">369</td><td class="hits"></td><td class="source"> * @param {String} [options.sort] - This param determines the ordering of the facet field constraints.count</td></tr><tr><td class="line">370</td><td class="hits"></td><td class="source"> * @param {Number} [options.limit=100] - This parameter indicates the maximum number of constraint counts that should be returned for the facet fields. A negative value means unlimited.The solr's default value is 100.</td></tr><tr><td class="line">371</td><td class="hits"></td><td class="source"> * @param {Number} [options.offset=0] - This param indicates an offset into the list of constraints to allow paging.The solr's default value is 0.</td></tr><tr><td class="line">372</td><td class="hits"></td><td class="source"> * @param {Number} [options.mincount=0] - This parameter indicates the minimum counts for facet fields should be included in the response. The solr's default value is 0.</td></tr><tr><td class="line">373</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.missing=false] - Set to `true` this param indicates that in addition to the Term based constraints of a facet field, a count of all matching results which have no value for the field should be computed. The solr's default value is false.</td></tr><tr><td class="line">374</td><td class="hits"></td><td class="source"> * @param {String} [options.method=&quot;fc&quot;] - This parameter indicates what type of algorithm/method to use when faceting a field.The solr's default value is fc (except for BoolField).</td></tr><tr><td class="line">375</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">376</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">377</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">378</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">379</td><td class="hits">1</td><td class="source">Query.prototype.facet = function(options){</td></tr><tr class="hit"><td class="line">380</td><td class="hits">2</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">381</td><td class="hits">2</td><td class="source"> if(options.on === false){</td></tr><tr class="miss"><td class="line">382</td><td class="hits">0</td><td class="source"> this.parameters.push('facet=false');</td></tr><tr><td class="line">383</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">384</td><td class="hits">2</td><td class="source"> this.parameters.push('facet=true');</td></tr><tr><td class="line">385</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">386</td><td class="hits">2</td><td class="source"> if(options.query){</td></tr><tr class="hit"><td class="line">387</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.query=' + encodeURIComponent(options.query))</td></tr><tr><td class="line">388</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">389</td><td class="hits">2</td><td class="source"> if(options.field){</td></tr><tr class="hit"><td class="line">390</td><td class="hits">2</td><td class="source"> if(!Array.isArray(options.field)){</td></tr><tr class="hit"><td class="line">391</td><td class="hits">2</td><td class="source"> options.field = [options.field];</td></tr><tr><td class="line">392</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">393</td><td class="hits">2</td><td class="source"> for (var i = 0; i &lt; options.field.length; i++) {</td></tr><tr class="hit"><td class="line">394</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.field=' + options.field[i])</td></tr><tr><td class="line">395</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">396</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">397</td><td class="hits">2</td><td class="source"> if(options.prefix){</td></tr><tr class="hit"><td class="line">398</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.prefix=' + format.escapeAndEncode(options.prefix))</td></tr><tr><td class="line">399</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">400</td><td class="hits">2</td><td class="source"> if(options.sort){</td></tr><tr class="hit"><td class="line">401</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.sort=' + format.escapeAndEncode(options.sort))</td></tr><tr><td class="line">402</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">403</td><td class="hits">2</td><td class="source"> if(options.limit !== undefined){</td></tr><tr class="hit"><td class="line">404</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.limit=' + options.limit);</td></tr><tr><td class="line">405</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">406</td><td class="hits">2</td><td class="source"> if(options.offset !== undefined){</td></tr><tr class="hit"><td class="line">407</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.offset=' + options.offset);</td></tr><tr><td class="line">408</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">409</td><td class="hits">2</td><td class="source"> if(options.mincount !== undefined){</td></tr><tr class="hit"><td class="line">410</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.mincount=' + options.mincount);</td></tr><tr><td class="line">411</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">412</td><td class="hits">2</td><td class="source"> if(options.missing !== undefined){</td></tr><tr class="hit"><td class="line">413</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.missing=' + options.missing);</td></tr><tr><td class="line">414</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">415</td><td class="hits">2</td><td class="source"> if(options.method){</td></tr><tr class="hit"><td class="line">416</td><td class="hits">2</td><td class="source"> this.parameters.push('facet.method=' + options.method);</td></tr><tr><td class="line">417</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">418</td><td class="hits">2</td><td class="source"> return self;</td></tr><tr><td class="line">419</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">420</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">421</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">422</td><td class="hits"></td><td class="source"> * Create a MoreLikeThis. MoreLikeThis constructs a lucene query based on terms within a document.</td></tr><tr><td class="line">423</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">424</td><td class="hits"></td><td class="source"> * @param {Object} options - set of options to create a morelikethis</td></tr><tr><td class="line">425</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.on=true] - Turn on or off morelikethis</td></tr><tr><td class="line">426</td><td class="hits"></td><td class="source"> * @param {String|Array} [options.fl] - The fields to use for similarity. NOTE: if possible, these should have a stored TermVector</td></tr><tr><td class="line">427</td><td class="hits"></td><td class="source"> * @param {Number} [options.count] - The number of similar documents to return for each result.</td></tr><tr><td class="line">428</td><td class="hits"></td><td class="source"> * @param {Number} [options.mintf] - Minimum Term Frequency - the frequency below which terms will be ignored in the source doc.</td></tr><tr><td class="line">429</td><td class="hits"></td><td class="source"> * @param {Number} [options.mindf] - Minimum Document Frequency - the frequency at which words will be ignored which do not occur in at least this many docs.</td></tr><tr><td class="line">430</td><td class="hits"></td><td class="source"> * @param {Number} [options.minwl] - minimum word length below which words will be ignored.</td></tr><tr><td class="line">431</td><td class="hits"></td><td class="source"> * @param {Number} [options.maxwl] - maximum word length above which words will be ignored.</td></tr><tr><td class="line">432</td><td class="hits"></td><td class="source"> * @param {Number} [options.maxqt] - maximum number of query terms that will be included in any generated query.</td></tr><tr><td class="line">433</td><td class="hits"></td><td class="source"> * @param {Number} [options.maxntp] - maximum number of tokens to parse in each example doc field that is not stored with TermVector support.</td></tr><tr><td class="line">434</td><td class="hits"></td><td class="source"> * @param {Boolean} [options.boost] - set if the query will be boosted by the interesting term relevance.</td></tr><tr><td class="line">435</td><td class="hits"></td><td class="source"> * @param {String|Object} [options.qf] - Query fields and their boosts using the same format as that used in DisMaxQParserPlugin. These fields must also be specified in mlt.fl.</td></tr><tr><td class="line">436</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">437</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">438</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">439</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">440</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">441</td><td class="hits">1</td><td class="source">Query.prototype.mlt = function(options){</td></tr><tr class="hit"><td class="line">442</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">443</td><td class="hits">1</td><td class="source"> if(options.on === false){</td></tr><tr class="miss"><td class="line">444</td><td class="hits">0</td><td class="source"> this.parameters.push('mlt=false');</td></tr><tr><td class="line">445</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">446</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt=true');</td></tr><tr><td class="line">447</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">448</td><td class="hits">1</td><td class="source"> if(options.fl){</td></tr><tr class="hit"><td class="line">449</td><td class="hits">2</td><td class="source"> if(options.fl instanceof Array) options.fl = options.fl.join(',');</td></tr><tr class="hit"><td class="line">450</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.fl=' + format.escapeAndEncode(options.fl))</td></tr><tr><td class="line">451</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">452</td><td class="hits">1</td><td class="source"> if(options.count !== undefined){</td></tr><tr class="hit"><td class="line">453</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.count=' + options.count)</td></tr><tr><td class="line">454</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">455</td><td class="hits">1</td><td class="source"> if(options.mintf !== undefined){</td></tr><tr class="hit"><td class="line">456</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.mintf=' + options.mintf)</td></tr><tr><td class="line">457</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">458</td><td class="hits">1</td><td class="source"> if(options.mindf !== undefined){</td></tr><tr class="hit"><td class="line">459</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.mindf=' + options.mindf);</td></tr><tr><td class="line">460</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">461</td><td class="hits">1</td><td class="source"> if(options.minwl !== undefined){</td></tr><tr class="hit"><td class="line">462</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.minwl=' + options.minwl)</td></tr><tr><td class="line">463</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">464</td><td class="hits">1</td><td class="source"> if(options.maxwl !== undefined ){</td></tr><tr class="hit"><td class="line">465</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.maxwl=' + options.maxwl)</td></tr><tr><td class="line">466</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">467</td><td class="hits">1</td><td class="source"> if(options.maxqt !== undefined){</td></tr><tr class="hit"><td class="line">468</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.maxqt=' + options.maxqt)</td></tr><tr><td class="line">469</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">470</td><td class="hits">1</td><td class="source"> if(options.maxntp !== undefined){</td></tr><tr class="hit"><td class="line">471</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.maxntp=' + options.maxntp);</td></tr><tr><td class="line">472</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">473</td><td class="hits">1</td><td class="source"> if(options.boost !== undefined){</td></tr><tr class="hit"><td class="line">474</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.boost=' + options.boost);</td></tr><tr><td class="line">475</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">476</td><td class="hits">1</td><td class="source"> if(options.qf){</td></tr><tr class="hit"><td class="line">477</td><td class="hits">1</td><td class="source"> if( typeof options.qf === 'object'){</td></tr><tr class="miss"><td class="line">478</td><td class="hits">0</td><td class="source"> var parameter = querystring.stringify(options.qf, '%20' , '^');;</td></tr><tr><td class="line">479</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">480</td><td class="hits">1</td><td class="source"> var parameter = format.escapeAndEncode(options.qf);</td></tr><tr><td class="line">481</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">482</td><td class="hits">1</td><td class="source"> this.parameters.push('mlt.qf=' + parameter);</td></tr><tr><td class="line">483</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">484</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">485</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">486</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">487</td><td class="hits"></td><td class="source">/*!</td></tr><tr><td class="line">488</td><td class="hits"></td><td class="source"> * DisMax parameters</td></tr><tr><td class="line">489</td><td class="hits"></td><td class="source"> * do not forget to use `.dismax()` when using these parameters</td></tr><tr><td class="line">490</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">491</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">492</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">493</td><td class="hits"></td><td class="source"> * Use the DisMax query parser</td></tr><tr><td class="line">494</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">495</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">496</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">497</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">498</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">499</td><td class="hits">1</td><td class="source">Query.prototype.dismax = function(){</td></tr><tr class="hit"><td class="line">500</td><td class="hits">1</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">501</td><td class="hits">1</td><td class="source"> this.defType('dismax');</td></tr><tr class="hit"><td class="line">502</td><td class="hits">1</td><td class="source"> return self;</td></tr><tr><td class="line">503</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">504</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">505</td><td class="hits"></td><td class="source">/*!</td></tr><tr><td class="line">506</td><td class="hits"></td><td class="source"> * EDisMax parameters</td></tr><tr><td class="line">507</td><td class="hits"></td><td class="source"> * do not forget to use `.edismax()` when using these parameters</td></tr><tr><td class="line">508</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">509</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">510</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">511</td><td class="hits"></td><td class="source"> * Use the EDisMax query parser</td></tr><tr><td class="line">512</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">513</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">514</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">515</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">516</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">517</td><td class="hits">1</td><td class="source">Query.prototype.edismax = function(){</td></tr><tr class="miss"><td class="line">518</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">519</td><td class="hits">0</td><td class="source"> this.defType('edismax');</td></tr><tr class="miss"><td class="line">520</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">521</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">522</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">523</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">524</td><td class="hits"></td><td class="source"> * Add the parameter debugQuery.</td></tr><tr><td class="line">525</td><td class="hits"></td><td class="source"> * Additional debugging informations will be available in the response.</td></tr><tr><td class="line">526</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">527</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">528</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">529</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">530</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">531</td><td class="hits">1</td><td class="source">Query.prototype.debugQuery = function(){</td></tr><tr class="hit"><td class="line">532</td><td class="hits">16</td><td class="source"> var self = this;</td></tr><tr class="hit"><td class="line">533</td><td class="hits">16</td><td class="source"> this.parameters.push('debugQuery=true');</td></tr><tr class="hit"><td class="line">534</td><td class="hits">16</td><td class="source"> return self;</td></tr><tr><td class="line">535</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">536</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">537</td><td class="hits"></td><td class="source">//TODO</td></tr><tr class="hit"><td class="line">538</td><td class="hits">1</td><td class="source">Query.prototype.ps = function(){}</td></tr><tr><td class="line">539</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">540</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">541</td><td class="hits"></td><td class="source"> * Set the &quot;boosts&quot; to associate with each fields</td></tr><tr><td class="line">542</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">543</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">544</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">545</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">546</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">547</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">548</td><td class="hits"></td><td class="source"> * @example</td></tr><tr><td class="line">549</td><td class="hits"></td><td class="source"> * var query = client.createQuery();</td></tr><tr><td class="line">550</td><td class="hits"></td><td class="source"> * query.qf({title : 2.2, description : 0.5 });</td></tr><tr><td class="line">551</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">552</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">553</td><td class="hits">1</td><td class="source">Query.prototype.qf = function(options){</td></tr><tr class="miss"><td class="line">554</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">555</td><td class="hits">0</td><td class="source"> var parameter = 'qf=' ;</td></tr><tr class="miss"><td class="line">556</td><td class="hits">0</td><td class="source"> parameter += querystring.stringify(options, '%20' , '^');</td></tr><tr class="miss"><td class="line">557</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">558</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">559</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">560</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">561</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">562</td><td class="hits"></td><td class="source"> * Set the minimum number or percent of clauses that must match.</td></tr><tr><td class="line">563</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">564</td><td class="hits"></td><td class="source"> * @param {String|Number} minimum - number or percent of clauses that must match</td></tr><tr><td class="line">565</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">566</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">567</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">568</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">569</td><td class="hits"></td><td class="source"> * @example</td></tr><tr><td class="line">570</td><td class="hits"></td><td class="source"> * var query = client.createQuery();</td></tr><tr><td class="line">571</td><td class="hits"></td><td class="source"> * query.mm(2); // or query.mm('75%');</td></tr><tr><td class="line">572</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">573</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">574</td><td class="hits">1</td><td class="source">Query.prototype.mm = function(minimum){</td></tr><tr class="miss"><td class="line">575</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">576</td><td class="hits">0</td><td class="source"> var parameter = 'mm=' + minimum;</td></tr><tr class="miss"><td class="line">577</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">578</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">579</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">580</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">581</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">582</td><td class="hits"></td><td class="source"> * Set the Phrase Fields parameter.</td></tr><tr><td class="line">583</td><td class="hits"></td><td class="source"> * Once the list of matching documents has been identified using the &quot;fq&quot; and &quot;qf&quot; params, the &quot;pf&quot; param can be used to &quot;boost&quot; the score of documents in cases where all of the terms</td></tr><tr><td class="line">584</td><td class="hits"></td><td class="source"> * in the &quot;q&quot; param appear in close proximity.</td></tr><tr><td class="line">585</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">586</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">587</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">588</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">589</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">590</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">591</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">592</td><td class="hits">1</td><td class="source">Query.prototype.pf = function(options){</td></tr><tr class="miss"><td class="line">593</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">594</td><td class="hits">0</td><td class="source"> var parameter = 'pf=' ;</td></tr><tr class="miss"><td class="line">595</td><td class="hits">0</td><td class="source"> parameter += querystring.stringify(options, '%20' , '^');</td></tr><tr class="miss"><td class="line">596</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">597</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">598</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">599</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">600</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">601</td><td class="hits"></td><td class="source"> * Set the phrase slop allowed in a query.</td></tr><tr><td class="line">602</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">603</td><td class="hits"></td><td class="source"> * @param {Number} slop - Amount of phrase slop allowed by the query filter. This value should represent the maximum number of words allowed between words in a field that match a phrase in the query.</td></tr><tr><td class="line">604</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">605</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">606</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">607</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">608</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">609</td><td class="hits">1</td><td class="source">Query.prototype.ps = function(slop){</td></tr><tr class="miss"><td class="line">610</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">611</td><td class="hits">0</td><td class="source"> var parameter = 'ps=' + slop;</td></tr><tr class="miss"><td class="line">612</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">613</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">614</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">615</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">616</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">617</td><td class="hits"></td><td class="source"> * Set the query slop allowed in a query.</td></tr><tr><td class="line">618</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">619</td><td class="hits"></td><td class="source"> * @param {Number} slop - Amount of query slop allowed by the query filter. This value should be used to affect boosting of query strings.</td></tr><tr><td class="line">620</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">621</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">622</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">623</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">624</td><td class="hits">1</td><td class="source">Query.prototype.qs = function(slop){</td></tr><tr class="miss"><td class="line">625</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">626</td><td class="hits">0</td><td class="source"> var parameter = 'qs=' + slop;</td></tr><tr class="miss"><td class="line">627</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">628</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">629</td><td class="hits"></td><td class="source">};</td></tr><tr><td class="line">630</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">631</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">632</td><td class="hits"></td><td class="source"> * Set the tiebreaker in DisjunctionMaxQueries (should be something much less than 1)</td></tr><tr><td class="line">633</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">634</td><td class="hits"></td><td class="source"> * @param {Float|Number} tiebreaker -</td></tr><tr><td class="line">635</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">636</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">637</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">638</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">639</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">640</td><td class="hits">1</td><td class="source">Query.prototype.tie = function(tiebreaker){</td></tr><tr class="miss"><td class="line">641</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">642</td><td class="hits">0</td><td class="source"> var parameter = 'tie=' + tiebreaker;</td></tr><tr class="miss"><td class="line">643</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">644</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">645</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">646</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">647</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">648</td><td class="hits"></td><td class="source"> * Set the Boost Query parameter.</td></tr><tr><td class="line">649</td><td class="hits"></td><td class="source"> * A raw query string (in the SolrQuerySyntax) that will be included with the user's query to influence the score. If this is a BooleanQuery with a default boost (1.0f) then the individual clauses will be added directly to the main query. Otherwise, the query will be included as is.</td></tr><tr><td class="line">650</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">651</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">652</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">653</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">654</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">655</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">656</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">657</td><td class="hits">1</td><td class="source">Query.prototype.bq = function(options){</td></tr><tr class="miss"><td class="line">658</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">659</td><td class="hits">0</td><td class="source"> var parameter = 'bq=' ;</td></tr><tr class="miss"><td class="line">660</td><td class="hits">0</td><td class="source"> parameter += querystring.stringify(options, '%20' , '^');</td></tr><tr class="miss"><td class="line">661</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">662</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">663</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">664</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">665</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">666</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">667</td><td class="hits"></td><td class="source"> * Set the Functions (with optional boosts) that will be included in the user's query to influence the score.</td></tr><tr><td class="line">668</td><td class="hits"></td><td class="source"> * @param {String} functions - e.g.: `recip(rord(myfield),1,2,3)^1.5`</td></tr><tr><td class="line">669</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">670</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">671</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">672</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">673</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">674</td><td class="hits">1</td><td class="source">Query.prototype.bf = function(functions){</td></tr><tr class="miss"><td class="line">675</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">676</td><td class="hits">0</td><td class="source"> var parameter = 'bf=' + functions;</td></tr><tr class="miss"><td class="line">677</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">678</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">679</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">680</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">681</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">682</td><td class="hits"></td><td class="source"> * Set the Functions (with optional boosts) that will be included in the user's query to influence the score.</td></tr><tr><td class="line">683</td><td class="hits"></td><td class="source"> * @param {String} functions - e.g.: `recip(rord(myfield),1,2,3)^1.5`</td></tr><tr><td class="line">684</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">685</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">686</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">687</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">688</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">689</td><td class="hits">1</td><td class="source">Query.prototype.boost = function(functions){</td></tr><tr class="miss"><td class="line">690</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">691</td><td class="hits">0</td><td class="source"> var parameter = 'boost=' + encodeURIComponent(functions);</td></tr><tr class="miss"><td class="line">692</td><td class="hits">0</td><td class="source"> this.parameters.push(parameter);</td></tr><tr class="miss"><td class="line">693</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">694</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">695</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">696</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">697</td><td class="hits"></td><td class="source"> * Build a querystring with the array of `this.parameters`.</td></tr><tr><td class="line">698</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">699</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">700</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">701</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">702</td><td class="hits">1</td><td class="source">Query.prototype.build = function(){</td></tr><tr class="hit"><td class="line">703</td><td class="hits">20</td><td class="source"> return this.parameters.join('&amp;');</td></tr><tr><td class="line">704</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">705</td><td class="hits"></td><td class="source"> </td></tr></tbody></table></div><div class="file"><h2 id="solr.js">solr.js</h2><div id="stats" class="high"><div class="percentage">83%</div><div class="sloc">185</div><div class="hits">154</div><div class="misses">31</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr><td class="line">1</td><td class="hits"></td><td class="source">/*!</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> * solr client</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> * Copyright(c) 2011-2012 HipSnip Limited</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> * Copyright(c) 2013-2014 R&#195;&#169;my Loubradou</td></tr><tr><td class="line">5</td><td class="hits"></td><td class="source"> * Author R&#195;&#169;my Loubradou &lt;remyloubradou@gmail.com&gt;</td></tr><tr><td class="line">6</td><td class="hits"></td><td class="source"> * MIT Licensed</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> * Load dependencies</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">13</td><td class="hits">1</td><td class="source">var http = require('http'),</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> Query = require('./query'),</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> querystring = require('querystring'),</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> format = require('./utils/format'),</td></tr><tr><td class="line">17</td><td class="hits"></td><td class="source"> SolrError = require('./error/solr-error'),</td></tr><tr><td class="line">18</td><td class="hits"></td><td class="source"> JSONStream = require('JSONStream'),</td></tr><tr><td class="line">19</td><td class="hits"></td><td class="source"> duplexer = require('duplexer'),</td></tr><tr><td class="line">20</td><td class="hits"></td><td class="source"> request = require('request');</td></tr><tr><td class="line">21</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">22</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">23</td><td class="hits"></td><td class="source"> * Expose `createClient()`.</td></tr><tr><td class="line">24</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">26</td><td class="hits">1</td><td class="source">exports.createClient = createClient;</td></tr><tr><td class="line">27</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">29</td><td class="hits"></td><td class="source"> * Create an instance of `Client`</td></tr><tr><td class="line">30</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> * @param {String|Object} [host='127.0.0.1'] - IP address or host address of the Solr server</td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source"> * @param {Number|String} [port='8983'] - port of the Solr server</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> * @param {String} [core=''] - name of the Solr core requested</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> * @param {String} [path='/solr'] - root path of all requests</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source"> * @return {Client}</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">40</td><td class="hits">1</td><td class="source">function createClient(host, port, core, path, agent){</td></tr><tr class="hit"><td class="line">41</td><td class="hits">25</td><td class="source"> var options = (typeof host === 'object')? host : {</td></tr><tr><td class="line">42</td><td class="hits"></td><td class="source"> host : host,</td></tr><tr><td class="line">43</td><td class="hits"></td><td class="source"> port : port,</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> core : core,</td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source"> path : path,</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> agent : agent</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">48</td><td class="hits">25</td><td class="source"> return new Client(options);</td></tr><tr><td class="line">49</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> * Solr client</td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source"> * @constructor</td></tr><tr><td class="line">54</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> * @param {Object} options - set of options used to request the Solr server</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source"> * @param {String} options.host - IP address or host address of the Solr server</td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> * @param {Number|String} options.port - port of the Solr server</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> * @param {String} options.core - name of the Solr core requested</td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> * @param {String} options.path - root path of all requests</td></tr><tr><td class="line">60</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">61</td><td class="hits"></td><td class="source"> * @return {Client}</td></tr><tr><td class="line">62</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">63</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">64</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">65</td><td class="hits">1</td><td class="source">function Client(options){</td></tr><tr class="hit"><td class="line">66</td><td class="hits">25</td><td class="source"> this.options = {</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source"> host : options.host || '127.0.0.1',</td></tr><tr><td class="line">68</td><td class="hits"></td><td class="source"> port : options.port || '8983',</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> core : options.core || '',</td></tr><tr><td class="line">70</td><td class="hits"></td><td class="source"> path : options.path || '/solr',</td></tr><tr><td class="line">71</td><td class="hits"></td><td class="source"> agent : options.agent</td></tr><tr><td class="line">72</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">73</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">74</td><td class="hits"></td><td class="source"> // Default paths of all request handlers</td></tr><tr class="hit"><td class="line">75</td><td class="hits">25</td><td class="source"> this.UPDATE_JSON_HANDLER = 'update/json';</td></tr><tr class="hit"><td class="line">76</td><td class="hits">25</td><td class="source"> this.UPDATE_HANDLER = 'update';</td></tr><tr class="hit"><td class="line">77</td><td class="hits">25</td><td class="source"> this.SELECT_HANDLER = 'select';</td></tr><tr class="hit"><td class="line">78</td><td class="hits">25</td><td class="source"> this.ADMIN_PING_HANDLER = 'admin/ping';</td></tr><tr class="hit"><td class="line">79</td><td class="hits">25</td><td class="source"> this.GET_HANDLER = 'get';</td></tr><tr class="hit"><td class="line">80</td><td class="hits">25</td><td class="source"> this.SPELL_HANDLER = 'spell';</td></tr><tr><td class="line">81</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">82</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">83</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">84</td><td class="hits"></td><td class="source"> * Create credential using the basic access authentication method</td></tr><tr><td class="line">85</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">86</td><td class="hits"></td><td class="source"> * @param {String} username</td></tr><tr><td class="line">87</td><td class="hits"></td><td class="source"> * @param {String} password</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">89</td><td class="hits"></td><td class="source"> * @return {Client}</td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">91</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">92</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">93</td><td class="hits">1</td><td class="source">Client.prototype.basicAuth = function(username,password){</td></tr><tr class="miss"><td class="line">94</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">95</td><td class="hits">0</td><td class="source"> this.options.authorization = 'Basic ' + new Buffer(username + ':' + password).toString('base64');</td></tr><tr class="miss"><td class="line">96</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">99</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">100</td><td class="hits"></td><td class="source"> * Remove authorization header</td></tr><tr><td class="line">101</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">102</td><td class="hits"></td><td class="source"> * @return {Client}</td></tr><tr><td class="line">103</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">104</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">105</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">106</td><td class="hits">1</td><td class="source">Client.prototype.unauth = function(){</td></tr><tr class="miss"><td class="line">107</td><td class="hits">0</td><td class="source"> var self = this;</td></tr><tr class="miss"><td class="line">108</td><td class="hits">0</td><td class="source"> delete this.options.authorization;</td></tr><tr class="miss"><td class="line">109</td><td class="hits">0</td><td class="source"> return self;</td></tr><tr><td class="line">110</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">111</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">112</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">113</td><td class="hits"></td><td class="source"> * Add a document or a list of documents</td></tr><tr><td class="line">114</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source"> * @param {Object|Array} doc - document or list of documents to add into the Solr database</td></tr><tr><td class="line">116</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">117</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">118</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">119</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">120</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">121</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">122</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">123</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">124</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">125</td><td class="hits">1</td><td class="source">Client.prototype.add = function(docs,options,callback){</td></tr><tr class="hit"><td class="line">126</td><td class="hits">6</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">127</td><td class="hits">2</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">128</td><td class="hits">2</td><td class="source"> options = {};</td></tr><tr><td class="line">129</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">130</td><td class="hits">6</td><td class="source"> docs = format.dateISOify(docs); // format `Date` object into string understable for Solr as a date.</td></tr><tr class="hit"><td class="line">131</td><td class="hits">6</td><td class="source"> docs = Array.isArray(docs) ? docs : [docs];</td></tr><tr class="hit"><td class="line">132</td><td class="hits">6</td><td class="source"> return this.update(docs,options,callback);</td></tr><tr><td class="line">133</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">134</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">135</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">136</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">137</td><td class="hits"></td><td class="source"> * Get a document by id or a list of documents by ids using the Real-time-get feature</td></tr><tr><td class="line">138</td><td class="hits"></td><td class="source"> * in SOLR4 (https://wiki.apache.org/solr/RealTimeGet)</td></tr><tr><td class="line">139</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">140</td><td class="hits"></td><td class="source"> * @param {String|Array} ids - id or list of ids that identify the documents to get</td></tr><tr><td class="line">141</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">144</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">145</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">146</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">147</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">148</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">149</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">150</td><td class="hits">1</td><td class="source">Client.prototype.realTimeGet = function(ids, options, callback){</td></tr><tr class="hit"><td class="line">151</td><td class="hits">2</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="miss"><td class="line">152</td><td class="hits">0</td><td class="source"> callback = options;</td></tr><tr class="miss"><td class="line">153</td><td class="hits">0</td><td class="source"> options = {};</td></tr><tr><td class="line">154</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">155</td><td class="hits">2</td><td class="source"> ids = Array.isArray(ids) ? ids : [ids];</td></tr><tr class="hit"><td class="line">156</td><td class="hits">2</td><td class="source"> options.ids = ids.join(',');</td></tr><tr><td class="line">157</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">158</td><td class="hits">2</td><td class="source"> var query = querystring.stringify(options);</td></tr><tr class="hit"><td class="line">159</td><td class="hits">2</td><td class="source"> return this.get(this.GET_HANDLER,query,callback);</td></tr><tr><td class="line">160</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">161</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">162</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">163</td><td class="hits"></td><td class="source"> * Add the remote resource located at the given path `options.path` into the Solr database.</td></tr><tr><td class="line">164</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">165</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">166</td><td class="hits"></td><td class="source"> * @param {String} options.path - path of the file. HTTP URL, the full path or a path relative to the CWD of the running solr server must be used.</td></tr><tr><td class="line">167</td><td class="hits"></td><td class="source"> * @param {String} [options.format='xml'] - format of the resource. XML, CSV or JSON formats must be used.</td></tr><tr><td class="line">168</td><td class="hits"></td><td class="source"> * @param {String} [options.contentType='text/plain;charset=utf-8'] - content type of the resource</td></tr><tr><td class="line">169</td><td class="hits"></td><td class="source"> * @param {Object} [options.parameters] - set of extras parameters pass along in the query.</td></tr><tr><td class="line">170</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">171</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">172</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">173</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">174</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">175</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">176</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">177</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">178</td><td class="hits">1</td><td class="source">Client.prototype.addRemoteResource = function(options,callback){</td></tr><tr class="miss"><td class="line">179</td><td class="hits">0</td><td class="source"> options.parameters = options.parameters || {};</td></tr><tr class="miss"><td class="line">180</td><td class="hits">0</td><td class="source"> options.format = (options.format === 'xml' ? '' : options.format || ''); // reason: the default route of the XmlUpdateRequestHandle is /update and not /update/xml.</td></tr><tr class="miss"><td class="line">181</td><td class="hits">0</td><td class="source"> options.parameters.commit = (options.parameters.commit === undefined ? false : options.parameters.commit);</td></tr><tr class="miss"><td class="line">182</td><td class="hits">0</td><td class="source"> options.parameters['stream.contentType'] = options.contentType || 'text/plain;charset=utf-8';</td></tr><tr class="miss"><td class="line">183</td><td class="hits">0</td><td class="source"> if(options.path.match(/^https?:\/\//)){</td></tr><tr class="miss"><td class="line">184</td><td class="hits">0</td><td class="source"> options.parameters['stream.url'] = options.path;</td></tr><tr><td class="line">185</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="miss"><td class="line">186</td><td class="hits">0</td><td class="source"> options.parameters['stream.file'] = options.path;</td></tr><tr><td class="line">187</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">188</td><td class="hits"></td><td class="source"> </td></tr><tr class="miss"><td class="line">189</td><td class="hits">0</td><td class="source"> var handler = this.UPDATE_HANDLER + '/' + options.format.toLowerCase();</td></tr><tr class="miss"><td class="line">190</td><td class="hits">0</td><td class="source"> var query = querystring.stringify(options.parameters);</td></tr><tr class="miss"><td class="line">191</td><td class="hits">0</td><td class="source"> return this.get(handler,query,callback);</td></tr><tr><td class="line">192</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">193</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">194</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">195</td><td class="hits"></td><td class="source"> * Create a writable/readable `Stream` to add documents into the Solr database</td></tr><tr><td class="line">196</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">197</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">198</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">199</td><td class="hits"></td><td class="source"> * return {Stream}</td></tr><tr><td class="line">200</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">201</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">202</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">203</td><td class="hits">1</td><td class="source">Client.prototype.createAddStream = function(options){</td></tr><tr class="hit"><td class="line">204</td><td class="hits">2</td><td class="source"> var path = [this.options.path,this.options.core, this.UPDATE_JSON_HANDLER + '?' + querystring.stringify(options) +'&amp;wt=json']</td></tr><tr><td class="line">205</td><td class="hits"></td><td class="source"> .filter(function(element){</td></tr><tr class="hit"><td class="line">206</td><td class="hits">6</td><td class="source"> return element;</td></tr><tr><td class="line">207</td><td class="hits"></td><td class="source"> })</td></tr><tr><td class="line">208</td><td class="hits"></td><td class="source"> .join('/');</td></tr><tr class="hit"><td class="line">209</td><td class="hits">2</td><td class="source"> var headers = {</td></tr><tr><td class="line">210</td><td class="hits"></td><td class="source"> 'content-type' : 'application/json',</td></tr><tr><td class="line">211</td><td class="hits"></td><td class="source"> 'charset' : 'utf-8'</td></tr><tr><td class="line">212</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">213</td><td class="hits">2</td><td class="source"> if(this.options.authorization){</td></tr><tr class="miss"><td class="line">214</td><td class="hits">0</td><td class="source"> headers['authorization'] = this.options.authorization;</td></tr><tr><td class="line">215</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">216</td><td class="hits">2</td><td class="source"> var optionsRequest = {</td></tr><tr><td class="line">217</td><td class="hits"></td><td class="source"> url : 'http://' + this.options.host +':' + this.options.port + path ,</td></tr><tr><td class="line">218</td><td class="hits"></td><td class="source"> method : 'POST',</td></tr><tr><td class="line">219</td><td class="hits"></td><td class="source"> headers : headers</td></tr><tr><td class="line">220</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">221</td><td class="hits">2</td><td class="source"> var jsonStreamStringify = JSONStream.stringify();</td></tr><tr class="hit"><td class="line">222</td><td class="hits">2</td><td class="source"> var postRequest = request(optionsRequest);</td></tr><tr class="hit"><td class="line">223</td><td class="hits">2</td><td class="source"> jsonStreamStringify.pipe(postRequest);</td></tr><tr class="hit"><td class="line">224</td><td class="hits">2</td><td class="source"> var duplex = duplexer(jsonStreamStringify,postRequest);</td></tr><tr class="hit"><td class="line">225</td><td class="hits">2</td><td class="source"> return duplex ;</td></tr><tr><td class="line">226</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">227</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">228</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">229</td><td class="hits"></td><td class="source"> * Commit last added and removed documents, that means your documents are now indexed.</td></tr><tr><td class="line">230</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">231</td><td class="hits"></td><td class="source"> * @param {Object} options</td></tr><tr><td class="line">232</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">233</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">234</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">235</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">236</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">237</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">238</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">239</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">240</td><td class="hits">1</td><td class="source">Client.prototype.commit = function(options,callback){</td></tr><tr class="hit"><td class="line">241</td><td class="hits">4</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">242</td><td class="hits">1</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">243</td><td class="hits">1</td><td class="source"> options = {};</td></tr><tr><td class="line">244</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">245</td><td class="hits">4</td><td class="source"> var data = {</td></tr><tr><td class="line">246</td><td class="hits"></td><td class="source"> commit : options || {}</td></tr><tr><td class="line">247</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">248</td><td class="hits">4</td><td class="source"> return this.update(data,callback);</td></tr><tr><td class="line">249</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">250</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">251</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">252</td><td class="hits"></td><td class="source"> * Call Lucene's IndexWriter.prepareCommit, the changes won't be visible in the index.</td></tr><tr><td class="line">253</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">254</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">255</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">256</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">257</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">258</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">259</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">260</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">261</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">262</td><td class="hits">1</td><td class="source">Client.prototype.prepareCommit = function(callback){</td></tr><tr class="hit"><td class="line">263</td><td class="hits">1</td><td class="source"> return this.update({},{ prepareCommit : true},callback);</td></tr><tr><td class="line">264</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">265</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">266</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">267</td><td class="hits"></td><td class="source"> * Soft commit all changes</td></tr><tr><td class="line">268</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">269</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">270</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">271</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">272</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">273</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">274</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">275</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">276</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">277</td><td class="hits">1</td><td class="source">Client.prototype.softCommit = function(callback){</td></tr><tr class="hit"><td class="line">278</td><td class="hits">1</td><td class="source"> return this.update({},{ softCommit : true},callback);</td></tr><tr><td class="line">279</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">280</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">281</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">282</td><td class="hits"></td><td class="source"> * Delete documents based on the given `field` and `text`.</td></tr><tr><td class="line">283</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">284</td><td class="hits"></td><td class="source"> * @param {String} field</td></tr><tr><td class="line">285</td><td class="hits"></td><td class="source"> * @param {String} text</td></tr><tr><td class="line">286</td><td class="hits"></td><td class="source"> * @param {Object} [options]</td></tr><tr><td class="line">287</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">288</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">289</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">290</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">291</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">292</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">293</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">294</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">295</td><td class="hits">1</td><td class="source">Client.prototype.delete = function(field,text,options,callback) {</td></tr><tr class="hit"><td class="line">296</td><td class="hits">5</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">297</td><td class="hits">2</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">298</td><td class="hits">2</td><td class="source"> options = {};</td></tr><tr><td class="line">299</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">300</td><td class="hits">5</td><td class="source"> text = format.dateISOify(text);</td></tr><tr class="hit"><td class="line">301</td><td class="hits">5</td><td class="source"> var data = {</td></tr><tr><td class="line">302</td><td class="hits"></td><td class="source"> 'delete' : {</td></tr><tr><td class="line">303</td><td class="hits"></td><td class="source"> query : field + ':' + format.escapeSpecialChars(text)</td></tr><tr><td class="line">304</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">305</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">306</td><td class="hits">5</td><td class="source"> return this.update(data,options,callback);</td></tr><tr><td class="line">307</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">308</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">309</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">310</td><td class="hits"></td><td class="source"> * Delete a range of documents based on the given `field`, `start` and `stop` arguments.</td></tr><tr><td class="line">311</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">312</td><td class="hits"></td><td class="source"> * @param {String} field</td></tr><tr><td class="line">313</td><td class="hits"></td><td class="source"> * @param {String|Date} start</td></tr><tr><td class="line">314</td><td class="hits"></td><td class="source"> * @param {String|Date} stop</td></tr><tr><td class="line">315</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">316</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">317</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">318</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">319</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">320</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">321</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">322</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">323</td><td class="hits">1</td><td class="source">Client.prototype.deleteByRange = function(field,start,stop,options,callback){</td></tr><tr class="hit"><td class="line">324</td><td class="hits">4</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">325</td><td class="hits">1</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">326</td><td class="hits">1</td><td class="source"> options = {};</td></tr><tr><td class="line">327</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">328</td><td class="hits">4</td><td class="source"> start = format.dateISOify(start);</td></tr><tr class="hit"><td class="line">329</td><td class="hits">4</td><td class="source"> stop = format.dateISOify(stop);</td></tr><tr class="hit"><td class="line">330</td><td class="hits">4</td><td class="source"> var data = {</td></tr><tr><td class="line">331</td><td class="hits"></td><td class="source"> 'delete' : {</td></tr><tr><td class="line">332</td><td class="hits"></td><td class="source"> query : field + ':[' + start + ' TO ' + stop + ']'</td></tr><tr><td class="line">333</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">334</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">335</td><td class="hits">4</td><td class="source"> return this.update(data,options,callback);</td></tr><tr><td class="line">336</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">337</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">338</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">339</td><td class="hits"></td><td class="source"> * Delete the document with the given `id`</td></tr><tr><td class="line">340</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">341</td><td class="hits"></td><td class="source"> * @param {String|Number} id - id of the document you want to delete</td></tr><tr><td class="line">342</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">343</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">344</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">345</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">346</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">347</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">348</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">349</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">350</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">351</td><td class="hits">1</td><td class="source">Client.prototype.deleteByID = function(id,options,callback){</td></tr><tr class="hit"><td class="line">352</td><td class="hits">5</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">353</td><td class="hits">2</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">354</td><td class="hits">2</td><td class="source"> options = {};</td></tr><tr><td class="line">355</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">356</td><td class="hits">5</td><td class="source"> var data = {</td></tr><tr><td class="line">357</td><td class="hits"></td><td class="source"> 'delete' : {</td></tr><tr><td class="line">358</td><td class="hits"></td><td class="source"> id : id</td></tr><tr><td class="line">359</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">360</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">361</td><td class="hits">5</td><td class="source"> return this.update(data,options,callback);</td></tr><tr><td class="line">362</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">363</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">364</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">365</td><td class="hits"></td><td class="source"> * Delete documents matching the given `query`</td></tr><tr><td class="line">366</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">367</td><td class="hits"></td><td class="source"> * @param {String} query -</td></tr><tr><td class="line">368</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">369</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">370</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">371</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">372</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">373</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">374</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">375</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">376</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">377</td><td class="hits">1</td><td class="source">Client.prototype.deleteByQuery = function(query,options,callback){</td></tr><tr class="hit"><td class="line">378</td><td class="hits">5</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">379</td><td class="hits">2</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">380</td><td class="hits">2</td><td class="source"> options = {};</td></tr><tr><td class="line">381</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">382</td><td class="hits">5</td><td class="source"> var data = {</td></tr><tr><td class="line">383</td><td class="hits"></td><td class="source"> 'delete' : {</td></tr><tr><td class="line">384</td><td class="hits"></td><td class="source"> query : query</td></tr><tr><td class="line">385</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">386</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">387</td><td class="hits">5</td><td class="source"> return this.update(data,options,callback);</td></tr><tr><td class="line">388</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">389</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">390</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">391</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">392</td><td class="hits"></td><td class="source"> * Delete all documents</td></tr><tr><td class="line">393</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">394</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">395</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">396</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">397</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">398</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">399</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">400</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">401</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">402</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">403</td><td class="hits">1</td><td class="source">Client.prototype.deleteAll = function(options,callback){</td></tr><tr class="hit"><td class="line">404</td><td class="hits">1</td><td class="source"> return this.deleteByQuery('*:*',options,callback);</td></tr><tr><td class="line">405</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">406</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">407</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">408</td><td class="hits"></td><td class="source"> * Optimize the index</td></tr><tr><td class="line">409</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">410</td><td class="hits"></td><td class="source"> * @param {Object} options -</td></tr><tr><td class="line">411</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">412</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">413</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">414</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">415</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">416</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">417</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">418</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">419</td><td class="hits">1</td><td class="source">Client.prototype.optimize = function(options,callback){</td></tr><tr class="hit"><td class="line">420</td><td class="hits">5</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">421</td><td class="hits">1</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">422</td><td class="hits">1</td><td class="source"> options = {};</td></tr><tr><td class="line">423</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">424</td><td class="hits">5</td><td class="source"> var data = {</td></tr><tr><td class="line">425</td><td class="hits"></td><td class="source"> optimize : options || {}</td></tr><tr><td class="line">426</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">427</td><td class="hits">5</td><td class="source"> return this.update(data,callback);</td></tr><tr><td class="line">428</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">429</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">430</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">431</td><td class="hits"></td><td class="source"> * Rollback all add/delete commands made since the last commit.</td></tr><tr><td class="line">432</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">433</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">434</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">435</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">436</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">437</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">438</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">439</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">440</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">441</td><td class="hits">1</td><td class="source">Client.prototype.rollback = function(callback){</td></tr><tr class="hit"><td class="line">442</td><td class="hits">1</td><td class="source"> var data = {</td></tr><tr><td class="line">443</td><td class="hits"></td><td class="source"> rollback : {}</td></tr><tr><td class="line">444</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">445</td><td class="hits">1</td><td class="source"> return this.update(data,callback);</td></tr><tr><td class="line">446</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">447</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">448</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">449</td><td class="hits"></td><td class="source"> * Send an update command to the Solr server with the given `data` stringified in the body.</td></tr><tr><td class="line">450</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">451</td><td class="hits"></td><td class="source"> * @param {Object} data - data sent to the Solr server</td></tr><tr><td class="line">452</td><td class="hits"></td><td class="source"> * @param {Object} [options] -</td></tr><tr><td class="line">453</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">454</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">455</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">456</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">457</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">458</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">459</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">460</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">461</td><td class="hits">1</td><td class="source">Client.prototype.update = function(data,options,callback){</td></tr><tr class="hit"><td class="line">462</td><td class="hits">37</td><td class="source"> if(typeof(options) === 'function'){</td></tr><tr class="hit"><td class="line">463</td><td class="hits">10</td><td class="source"> callback = options;</td></tr><tr class="hit"><td class="line">464</td><td class="hits">10</td><td class="source"> options = {};</td></tr><tr><td class="line">465</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">466</td><td class="hits">37</td><td class="source"> this.options.json = JSON.stringify(data);</td></tr><tr class="hit"><td class="line">467</td><td class="hits">37</td><td class="source"> this.options.fullPath = [this.options.path,this.options.core, this.UPDATE_JSON_HANDLER + '?' + querystring.stringify(options) +'&amp;wt=json']</td></tr><tr><td class="line">468</td><td class="hits"></td><td class="source"> .filter(function(element){</td></tr><tr class="hit"><td class="line">469</td><td class="hits">111</td><td class="source"> return element;</td></tr><tr><td class="line">470</td><td class="hits"></td><td class="source"> })</td></tr><tr><td class="line">471</td><td class="hits"></td><td class="source"> .join('/');</td></tr><tr class="hit"><td class="line">472</td><td class="hits">37</td><td class="source"> return updateRequest(this.options,callback);</td></tr><tr><td class="line">473</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">474</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">475</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">476</td><td class="hits"></td><td class="source"> * Search documents matching the `query`</td></tr><tr><td class="line">477</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">478</td><td class="hits"></td><td class="source"> * @param {Query|String} query</td></tr><tr><td class="line">479</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">480</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">481</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">482</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">483</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">484</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">485</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">486</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">487</td><td class="hits">1</td><td class="source">Client.prototype.search = function(query,callback){</td></tr><tr class="hit"><td class="line">488</td><td class="hits">21</td><td class="source"> return this.get(this.SELECT_HANDLER, query, callback);</td></tr><tr><td class="line">489</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">490</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">491</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">492</td><td class="hits"></td><td class="source"> * Search for all documents</td></tr><tr><td class="line">493</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">494</td><td class="hits"></td><td class="source"> * @param {Query|String} query</td></tr><tr><td class="line">495</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">496</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">497</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">498</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">499</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">500</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">501</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">502</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">503</td><td class="hits">1</td><td class="source">Client.prototype.searchAll = function(callback){</td></tr><tr class="hit"><td class="line">504</td><td class="hits">1</td><td class="source"> return this.search('q=*', callback);</td></tr><tr><td class="line">505</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">506</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">507</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">508</td><td class="hits"></td><td class="source"> * Search documents matching the `query`</td></tr><tr><td class="line">509</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">510</td><td class="hits"></td><td class="source"> * Spellcheck is also enabled.</td></tr><tr><td class="line">511</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">512</td><td class="hits"></td><td class="source"> * @param {Query|String} query</td></tr><tr><td class="line">513</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">514</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">515</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">516</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">517</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">518</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">519</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">520</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">521</td><td class="hits">1</td><td class="source">Client.prototype.spell = function(query,callback){</td></tr><tr class="miss"><td class="line">522</td><td class="hits">0</td><td class="source"> return this.get(this.SPELL_HANDLER, query, callback);</td></tr><tr><td class="line">523</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">524</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">525</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">526</td><td class="hits"></td><td class="source"> * Send an arbitrary HTTP GET request to Solr on the specified `handler` (as Solr like to call it i.e path)</td></tr><tr><td class="line">527</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">528</td><td class="hits"></td><td class="source"> * @param {String} handler</td></tr><tr><td class="line">529</td><td class="hits"></td><td class="source"> * @param {Query|String} query</td></tr><tr><td class="line">530</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">531</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">532</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">533</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">534</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">535</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">536</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">537</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">538</td><td class="hits">1</td><td class="source">Client.prototype.get = function(handler,query,callback){</td></tr><tr class="hit"><td class="line">539</td><td class="hits">27</td><td class="source"> if(typeof(query) === 'function'){</td></tr><tr class="hit"><td class="line">540</td><td class="hits">2</td><td class="source"> callback = query;</td></tr><tr class="hit"><td class="line">541</td><td class="hits">2</td><td class="source"> var parameters = '';</td></tr><tr><td class="line">542</td><td class="hits"></td><td class="source"> }else{</td></tr><tr><td class="line">543</td><td class="hits"></td><td class="source"> // Allow to be more flexible allow query to be a string and not only a Query object</td></tr><tr class="hit"><td class="line">544</td><td class="hits">25</td><td class="source"> var parameters = query.build ? query.build() : query;</td></tr><tr><td class="line">545</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">546</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">547</td><td class="hits">27</td><td class="source"> this.options.fullPath = [this.options.path,this.options.core,handler + '?' + parameters + '&amp;wt=json']</td></tr><tr><td class="line">548</td><td class="hits"></td><td class="source"> .filter(function(element){</td></tr><tr class="hit"><td class="line">549</td><td class="hits">81</td><td class="source"> return element;</td></tr><tr><td class="line">550</td><td class="hits"></td><td class="source"> })</td></tr><tr class="hit"><td class="line">551</td><td class="hits">27</td><td class="source"> .join('/'); ;</td></tr><tr class="hit"><td class="line">552</td><td class="hits">27</td><td class="source"> return queryRequest(this.options,callback);</td></tr><tr><td class="line">553</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">554</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">555</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">556</td><td class="hits"></td><td class="source"> * Create an instance of `Query`</td></tr><tr><td class="line">557</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">558</td><td class="hits"></td><td class="source"> * @return {Query}</td></tr><tr><td class="line">559</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">560</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">561</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">562</td><td class="hits">1</td><td class="source">Client.prototype.createQuery = function(){</td></tr><tr class="hit"><td class="line">563</td><td class="hits">20</td><td class="source"> return new Query();</td></tr><tr><td class="line">564</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">565</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">566</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">567</td><td class="hits"></td><td class="source"> * Expose `format.escapeSpecialChars` from `Client.escapeSpecialChars`</td></tr><tr><td class="line">568</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">569</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">570</td><td class="hits">1</td><td class="source">Client.prototype.escapeSpecialChars = format.escapeSpecialChars;</td></tr><tr><td class="line">571</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">572</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">573</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">574</td><td class="hits"></td><td class="source"> * Ping the Solr server</td></tr><tr><td class="line">575</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">576</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">577</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">578</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">579</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">580</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">581</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">582</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">583</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">584</td><td class="hits">1</td><td class="source">Client.prototype.ping = function(callback){</td></tr><tr class="hit"><td class="line">585</td><td class="hits">1</td><td class="source"> return this.get(this.ADMIN_PING_HANDLER, callback);</td></tr><tr><td class="line">586</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">587</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">588</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">589</td><td class="hits"></td><td class="source"> * HTTP POST request. Send update commands to the Solr server (commit, add, delete, optimize)</td></tr><tr><td class="line">590</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">591</td><td class="hits"></td><td class="source"> * @param {Object} params</td></tr><tr><td class="line">592</td><td class="hits"></td><td class="source"> * @param {String} params.host - IP address or host address of the Solr server</td></tr><tr><td class="line">593</td><td class="hits"></td><td class="source"> * @param {Number|String} params.port - port of the Solr server</td></tr><tr><td class="line">594</td><td class="hits"></td><td class="source"> * @param {String} params.core - name of the Solr core requested</td></tr><tr><td class="line">595</td><td class="hits"></td><td class="source"> * @param {String} params.authorization - value of the authorization header</td></tr><tr><td class="line">596</td><td class="hits"></td><td class="source"> * @param {String} params.fullPath - full path of the request</td></tr><tr><td class="line">597</td><td class="hits"></td><td class="source"> * @param {String} params.json</td></tr><tr><td class="line">598</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">599</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">600</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">601</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">602</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">603</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">604</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">605</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">606</td><td class="hits">1</td><td class="source">var updateRequest = function(params,callback){</td></tr><tr class="hit"><td class="line">607</td><td class="hits">37</td><td class="source"> var headers = {</td></tr><tr><td class="line">608</td><td class="hits"></td><td class="source"> 'content-type' : 'application/json',</td></tr><tr><td class="line">609</td><td class="hits"></td><td class="source"> 'charset' : 'utf-8',</td></tr><tr><td class="line">610</td><td class="hits"></td><td class="source"> 'content-length': Buffer.byteLength(params.json),</td></tr><tr><td class="line">611</td><td class="hits"></td><td class="source"> };</td></tr><tr class="hit"><td class="line">612</td><td class="hits">37</td><td class="source"> if(params.authorization){</td></tr><tr class="miss"><td class="line">613</td><td class="hits">0</td><td class="source"> headers['authorization'] = params.authorization;</td></tr><tr><td class="line">614</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">615</td><td class="hits">37</td><td class="source"> var options = {</td></tr><tr><td class="line">616</td><td class="hits"></td><td class="source"> host : params.host,</td></tr><tr><td class="line">617</td><td class="hits"></td><td class="source"> port : params.port,</td></tr><tr><td class="line">618</td><td class="hits"></td><td class="source"> method : 'POST',</td></tr><tr><td class="line">619</td><td class="hits"></td><td class="source"> headers : headers,</td></tr><tr><td class="line">620</td><td class="hits"></td><td class="source"> path : params.fullPath</td></tr><tr><td class="line">621</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">622</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">623</td><td class="hits">37</td><td class="source"> if(params.agent !== undefined){</td></tr><tr class="miss"><td class="line">624</td><td class="hits">0</td><td class="source"> options.agent = params.agent;</td></tr><tr><td class="line">625</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">626</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">627</td><td class="hits">37</td><td class="source"> var callbackResponse = function(res){</td></tr><tr class="hit"><td class="line">628</td><td class="hits">37</td><td class="source"> var buffer = '';</td></tr><tr class="hit"><td class="line">629</td><td class="hits">37</td><td class="source"> var err = null;</td></tr><tr class="hit"><td class="line">630</td><td class="hits">37</td><td class="source"> res.on('data',function(chunk){</td></tr><tr class="hit"><td class="line">631</td><td class="hits">37</td><td class="source"> buffer += chunk;</td></tr><tr><td class="line">632</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">633</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">634</td><td class="hits">37</td><td class="source"> res.on('end',function(){</td></tr><tr class="hit"><td class="line">635</td><td class="hits">37</td><td class="source"> if(res.statusCode !== 200){</td></tr><tr class="hit"><td class="line">636</td><td class="hits">3</td><td class="source"> err = new SolrError(res.statusCode,buffer);</td></tr><tr class="hit"><td class="line">637</td><td class="hits">6</td><td class="source"> if (callback) callback(err,null);</td></tr><tr><td class="line">638</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">639</td><td class="hits">34</td><td class="source"> try{</td></tr><tr class="hit"><td class="line">640</td><td class="hits">34</td><td class="source"> var data = JSON.parse(buffer);</td></tr><tr><td class="line">641</td><td class="hits"></td><td class="source"> }catch(error){</td></tr><tr class="miss"><td class="line">642</td><td class="hits">0</td><td class="source"> err = error;</td></tr><tr><td class="line">643</td><td class="hits"></td><td class="source"> }finally{</td></tr><tr class="hit"><td class="line">644</td><td class="hits">68</td><td class="source"> if (callback) callback(err,data);</td></tr><tr><td class="line">645</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">646</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">647</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">648</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">649</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">650</td><td class="hits">37</td><td class="source"> var request = http.request(options,callbackResponse);</td></tr><tr><td class="line">651</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">652</td><td class="hits">37</td><td class="source"> request.on('error',function(err){</td></tr><tr class="miss"><td class="line">653</td><td class="hits">0</td><td class="source"> if (callback) callback(err,null);</td></tr><tr><td class="line">654</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">655</td><td class="hits">37</td><td class="source"> request.write(params.json);</td></tr><tr class="hit"><td class="line">656</td><td class="hits">37</td><td class="source"> request.end();</td></tr><tr class="hit"><td class="line">657</td><td class="hits">37</td><td class="source"> return request;</td></tr><tr><td class="line">658</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">659</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">660</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">661</td><td class="hits"></td><td class="source"> * HTTP GET request. Send a query command to the Solr server (query)</td></tr><tr><td class="line">662</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">663</td><td class="hits"></td><td class="source"> * @param {Object} params</td></tr><tr><td class="line">664</td><td class="hits"></td><td class="source"> * @param {String} params.host - IP address or host address of the Solr server</td></tr><tr><td class="line">665</td><td class="hits"></td><td class="source"> * @param {Number|String} params.port - port of the Solr server</td></tr><tr><td class="line">666</td><td class="hits"></td><td class="source"> * @param {String} params.core - name of the Solr core requested</td></tr><tr><td class="line">667</td><td class="hits"></td><td class="source"> * @param {String} params.authorization - value of the authorization header</td></tr><tr><td class="line">668</td><td class="hits"></td><td class="source"> * @param {String} params.fullPath - full path of the request, contains query parameters</td></tr><tr><td class="line">669</td><td class="hits"></td><td class="source"> * @param {Function} callback(err,obj) - a function executed when the Solr server responds or an error occurs</td></tr><tr><td class="line">670</td><td class="hits"></td><td class="source"> * @param {Error} callback().err</td></tr><tr><td class="line">671</td><td class="hits"></td><td class="source"> * @param {Object} callback().obj - JSON response sent by the Solr server deserialized</td></tr><tr><td class="line">672</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">673</td><td class="hits"></td><td class="source"> * @return {http.ClientRequest}</td></tr><tr><td class="line">674</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">675</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">676</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">677</td><td class="hits">1</td><td class="source">var queryRequest = function(params,callback){</td></tr><tr class="hit"><td class="line">678</td><td class="hits">27</td><td class="source"> var options = {</td></tr><tr><td class="line">679</td><td class="hits"></td><td class="source"> host : params.host,</td></tr><tr><td class="line">680</td><td class="hits"></td><td class="source"> port : params.port,</td></tr><tr><td class="line">681</td><td class="hits"></td><td class="source"> path : params.fullPath</td></tr><tr><td class="line">682</td><td class="hits"></td><td class="source"> };</td></tr><tr><td class="line">683</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">684</td><td class="hits">27</td><td class="source"> if(params.agent !== undefined){</td></tr><tr class="miss"><td class="line">685</td><td class="hits">0</td><td class="source"> options.agent = params.agent;</td></tr><tr><td class="line">686</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">687</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">688</td><td class="hits">27</td><td class="source"> if(params.authorization){</td></tr><tr class="miss"><td class="line">689</td><td class="hits">0</td><td class="source"> var headers = {</td></tr><tr><td class="line">690</td><td class="hits"></td><td class="source"> 'authorization' : params.authorization</td></tr><tr><td class="line">691</td><td class="hits"></td><td class="source"> };</td></tr><tr class="miss"><td class="line">692</td><td class="hits">0</td><td class="source"> options.headers = headers;</td></tr><tr><td class="line">693</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">694</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">695</td><td class="hits">27</td><td class="source"> var callbackResponse = function(res){</td></tr><tr class="hit"><td class="line">696</td><td class="hits">27</td><td class="source"> var buffer = '';</td></tr><tr class="hit"><td class="line">697</td><td class="hits">27</td><td class="source"> var err = null;</td></tr><tr class="hit"><td class="line">698</td><td class="hits">27</td><td class="source"> res.on('data',function(chunk){</td></tr><tr class="hit"><td class="line">699</td><td class="hits">27</td><td class="source"> buffer += chunk;</td></tr><tr><td class="line">700</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">701</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">702</td><td class="hits">27</td><td class="source"> res.on('end',function(){</td></tr><tr class="hit"><td class="line">703</td><td class="hits">27</td><td class="source"> if(res.statusCode !== 200){</td></tr><tr class="miss"><td class="line">704</td><td class="hits">0</td><td class="source"> err = new SolrError(res.statusCode,buffer);</td></tr><tr class="miss"><td class="line">705</td><td class="hits">0</td><td class="source"> if (callback) callback(err,null);</td></tr><tr><td class="line">706</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">707</td><td class="hits">27</td><td class="source"> try{</td></tr><tr class="hit"><td class="line">708</td><td class="hits">27</td><td class="source"> var data = JSON.parse(buffer);</td></tr><tr><td class="line">709</td><td class="hits"></td><td class="source"> }catch(error){</td></tr><tr class="miss"><td class="line">710</td><td class="hits">0</td><td class="source"> err = error;</td></tr><tr><td class="line">711</td><td class="hits"></td><td class="source"> }finally{</td></tr><tr class="hit"><td class="line">712</td><td class="hits">54</td><td class="source"> if (callback) callback(err,data);</td></tr><tr><td class="line">713</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">714</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">715</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">716</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">717</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">718</td><td class="hits">27</td><td class="source"> var request = http.get(options,callbackResponse);</td></tr><tr><td class="line">719</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">720</td><td class="hits">27</td><td class="source"> request.on('error',function(err){</td></tr><tr class="miss"><td class="line">721</td><td class="hits">0</td><td class="source"> if (callback) callback(err,null);</td></tr><tr><td class="line">722</td><td class="hits"></td><td class="source"> });</td></tr><tr class="hit"><td class="line">723</td><td class="hits">27</td><td class="source"> return request;</td></tr><tr><td class="line">724</td><td class="hits"></td><td class="source">}</td></tr></tbody></table></div><div class="file"><h2 id="utils/format.js">utils/format.js</h2><div id="stats" class="high"><div class="percentage">83%</div><div class="sloc">43</div><div class="hits">36</div><div class="misses">7</div></div><table id="source"><thead><tr><th>Line</th><th>Hits</th><th>Source</th></tr></thead><tbody><tr><td class="line">1</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">2</td><td class="hits"></td><td class="source"> * Expose `dateISOify()` and `toISOString()`</td></tr><tr><td class="line">3</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">4</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">5</td><td class="hits">1</td><td class="source">exports.dateISOify = dateISOify;</td></tr><tr class="hit"><td class="line">6</td><td class="hits">1</td><td class="source">exports.toISOString = toISOString;</td></tr><tr><td class="line">7</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">8</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">9</td><td class="hits"></td><td class="source"> * ISOify `Date` objects (possibly in collections)</td></tr><tr><td class="line">10</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">11</td><td class="hits"></td><td class="source"> * @param {Array|Object} obj</td></tr><tr><td class="line">12</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">13</td><td class="hits"></td><td class="source"> * @return {Array|Object}</td></tr><tr><td class="line">14</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">15</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">16</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">17</td><td class="hits">1</td><td class="source">function dateISOify(obj){</td></tr><tr class="hit"><td class="line">18</td><td class="hits">34</td><td class="source"> if( obj instanceof Array ){</td></tr><tr class="hit"><td class="line">19</td><td class="hits">5</td><td class="source"> for(var i = 0; i &lt; obj.length; i++){</td></tr><tr class="hit"><td class="line">20</td><td class="hits">9</td><td class="source"> obj[i] = dateISOify(obj[i]);</td></tr><tr><td class="line">21</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">22</td><td class="hits">29</td><td class="source"> }else if(obj instanceof Object &amp;&amp; !(obj instanceof Date) ){</td></tr><tr class="hit"><td class="line">23</td><td class="hits">12</td><td class="source"> for(var key in obj){</td></tr><tr class="hit"><td class="line">24</td><td class="hits">25</td><td class="source"> if( obj[key] instanceof Date ) obj[key] = toISOString(obj[key]);</td></tr><tr><td class="line">25</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">26</td><td class="hits"></td><td class="source"> }else{</td></tr><tr class="hit"><td class="line">27</td><td class="hits">27</td><td class="source"> if( obj instanceof Date ) obj = toISOString(obj);</td></tr><tr><td class="line">28</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">29</td><td class="hits">34</td><td class="source"> return obj;</td></tr><tr class="hit"><td class="line">30</td><td class="hits">1</td><td class="source">};</td></tr><tr><td class="line">31</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">32</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">33</td><td class="hits"></td><td class="source"> * ISOify a single `Date` object</td></tr><tr><td class="line">34</td><td class="hits"></td><td class="source"> * Sidesteps `Invalid Date` objects by returning `null` instead</td></tr><tr><td class="line">35</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">36</td><td class="hits"></td><td class="source"> * @param {Date}</td></tr><tr><td class="line">37</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">38</td><td class="hits"></td><td class="source"> * @return {null|String}</td></tr><tr><td class="line">39</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">40</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">41</td><td class="hits">1</td><td class="source">function toISOString(date) {</td></tr><tr class="hit"><td class="line">42</td><td class="hits">11</td><td class="source"> return (date &amp;&amp; !isNaN(date.getTime())) ? date.toISOString() : null;</td></tr><tr class="hit"><td class="line">43</td><td class="hits">1</td><td class="source">};</td></tr><tr><td class="line">44</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">45</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">46</td><td class="hits"></td><td class="source"> * Expose `stringify()`</td></tr><tr><td class="line">47</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">48</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">49</td><td class="hits">1</td><td class="source">exports.stringify = stringify;</td></tr><tr><td class="line">50</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">51</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">52</td><td class="hits"></td><td class="source"> * Serialize an object to a string. Optionally override the default separator ('&amp;') and assignment ('=') characters.</td></tr><tr><td class="line">53</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">54</td><td class="hits"></td><td class="source"> * @param {Object} obj - object to serialiaze</td></tr><tr><td class="line">55</td><td class="hits"></td><td class="source"> * @param {String} [sep] - separator character</td></tr><tr><td class="line">56</td><td class="hits"></td><td class="source"> * @param {String} [eq] - assignment character</td></tr><tr><td class="line">57</td><td class="hits"></td><td class="source"> * @param {String} [name] -</td></tr><tr><td class="line">58</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">59</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">60</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">61</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">62</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">63</td><td class="hits">1</td><td class="source">function stringify(obj, sep, eq, name) {</td></tr><tr class="hit"><td class="line">64</td><td class="hits">1</td><td class="source"> sep = sep || '&amp;';</td></tr><tr class="hit"><td class="line">65</td><td class="hits">1</td><td class="source"> eq = eq || '=';</td></tr><tr class="hit"><td class="line">66</td><td class="hits">1</td><td class="source"> obj = (obj === null) ? undefined : obj;</td></tr><tr><td class="line">67</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">68</td><td class="hits">1</td><td class="source"> switch (typeof obj) {</td></tr><tr><td class="line">69</td><td class="hits"></td><td class="source"> case 'object':</td></tr><tr class="hit"><td class="line">70</td><td class="hits">1</td><td class="source"> return Object.keys(obj).map(function(k) {</td></tr><tr class="hit"><td class="line">71</td><td class="hits">1</td><td class="source"> if (Array.isArray(obj[k])) {</td></tr><tr class="miss"><td class="line">72</td><td class="hits">0</td><td class="source"> return obj[k].map(function(v) {</td></tr><tr class="miss"><td class="line">73</td><td class="hits">0</td><td class="source"> return stringifyPrimitive(k) +</td></tr><tr><td class="line">74</td><td class="hits"></td><td class="source"> eq +</td></tr><tr><td class="line">75</td><td class="hits"></td><td class="source"> stringifyPrimitive(v);</td></tr><tr><td class="line">76</td><td class="hits"></td><td class="source"> }).join(sep);</td></tr><tr><td class="line">77</td><td class="hits"></td><td class="source"> } else {</td></tr><tr class="hit"><td class="line">78</td><td class="hits">1</td><td class="source"> return stringifyPrimitive(k) +</td></tr><tr><td class="line">79</td><td class="hits"></td><td class="source"> eq +</td></tr><tr><td class="line">80</td><td class="hits"></td><td class="source"> stringifyPrimitive(obj[k]);</td></tr><tr><td class="line">81</td><td class="hits"></td><td class="source"> }</td></tr><tr><td class="line">82</td><td class="hits"></td><td class="source"> }).join(sep);</td></tr><tr><td class="line">83</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">84</td><td class="hits"></td><td class="source"> default:</td></tr><tr class="miss"><td class="line">85</td><td class="hits">0</td><td class="source"> if (!name) return '';</td></tr><tr class="miss"><td class="line">86</td><td class="hits">0</td><td class="source"> return stringifyPrimitive(name) + eq +</td></tr><tr><td class="line">87</td><td class="hits"></td><td class="source"> stringifyPrimitive(obj);</td></tr><tr><td class="line">88</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">89</td><td class="hits">1</td><td class="source">};</td></tr><tr><td class="line">90</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">91</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">92</td><td class="hits"></td><td class="source"> * Stringify a primitive</td></tr><tr><td class="line">93</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">94</td><td class="hits"></td><td class="source"> * @param {String|Boolean|Number} v - primitive value</td></tr><tr><td class="line">95</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">96</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">97</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">98</td><td class="hits"></td><td class="source"> */</td></tr><tr class="hit"><td class="line">99</td><td class="hits">1</td><td class="source">function stringifyPrimitive(v) {</td></tr><tr class="hit"><td class="line">100</td><td class="hits">2</td><td class="source"> switch (typeof v) {</td></tr><tr><td class="line">101</td><td class="hits"></td><td class="source"> case 'string':</td></tr><tr class="hit"><td class="line">102</td><td class="hits">2</td><td class="source"> return v;</td></tr><tr><td class="line">103</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">104</td><td class="hits"></td><td class="source"> case 'boolean':</td></tr><tr class="miss"><td class="line">105</td><td class="hits">0</td><td class="source"> return v ? 'true' : 'false';</td></tr><tr><td class="line">106</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">107</td><td class="hits"></td><td class="source"> case 'number':</td></tr><tr class="miss"><td class="line">108</td><td class="hits">0</td><td class="source"> return isFinite(v) ? v : '';</td></tr><tr><td class="line">109</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">110</td><td class="hits"></td><td class="source"> default:</td></tr><tr class="miss"><td class="line">111</td><td class="hits">0</td><td class="source"> return '';</td></tr><tr><td class="line">112</td><td class="hits"></td><td class="source"> }</td></tr><tr class="hit"><td class="line">113</td><td class="hits">1</td><td class="source">};</td></tr><tr><td class="line">114</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">115</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">116</td><td class="hits"></td><td class="source"> * Expose `escapeSpecialChars`</td></tr><tr><td class="line">117</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">118</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">119</td><td class="hits">1</td><td class="source"> exports.escapeSpecialChars = escapeSpecialChars;</td></tr><tr><td class="line">120</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">121</td><td class="hits"></td><td class="source"> /**</td></tr><tr><td class="line">122</td><td class="hits"></td><td class="source"> * Escape special characters that are part of the query syntax of Lucene</td></tr><tr><td class="line">123</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">124</td><td class="hits"></td><td class="source"> * @param {String} s - string to escape</td></tr><tr><td class="line">125</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">126</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">127</td><td class="hits"></td><td class="source"> * @api public</td></tr><tr><td class="line">128</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">129</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">130</td><td class="hits">1</td><td class="source">function escapeSpecialChars(s){</td></tr><tr class="hit"><td class="line">131</td><td class="hits">17</td><td class="source"> return s.replace(/([\+\-&amp;\|!\(\)\{\}\[\]\^&quot;~\*\?:\\\ ])/g, function(match) {</td></tr><tr class="hit"><td class="line">132</td><td class="hits">24</td><td class="source"> return '\\' + match;</td></tr><tr><td class="line">133</td><td class="hits"></td><td class="source"> });</td></tr><tr><td class="line">134</td><td class="hits"></td><td class="source">}</td></tr><tr><td class="line">135</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">136</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">137</td><td class="hits"></td><td class="source"> * Expose `escapeAndEncode`</td></tr><tr><td class="line">138</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">139</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">140</td><td class="hits">1</td><td class="source">exports.escapeAndEncode = escapeAndEncode;</td></tr><tr><td class="line">141</td><td class="hits"></td><td class="source"> </td></tr><tr><td class="line">142</td><td class="hits"></td><td class="source">/**</td></tr><tr><td class="line">143</td><td class="hits"></td><td class="source"> * Escape with `escapeSpecialChars` and encode with `encodeURIComponent`</td></tr><tr><td class="line">144</td><td class="hits"></td><td class="source"> * @param {String} s - string to escape and encode</td></tr><tr><td class="line">145</td><td class="hits"></td><td class="source"> *</td></tr><tr><td class="line">146</td><td class="hits"></td><td class="source"> * @return {String}</td></tr><tr><td class="line">147</td><td class="hits"></td><td class="source"> * @api private</td></tr><tr><td class="line">148</td><td class="hits"></td><td class="source"> */</td></tr><tr><td class="line">149</td><td class="hits"></td><td class="source"> </td></tr><tr class="hit"><td class="line">150</td><td class="hits">1</td><td class="source">function escapeAndEncode(s){</td></tr><tr class="hit"><td class="line">151</td><td class="hits">11</td><td class="source"> return encodeURIComponent(escapeSpecialChars(s.toString()));</td></tr><tr><td class="line">152</td><td class="hits"></td><td class="source">}</td></tr></tbody></table></div></div></div></body></html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment