bachy 12 anni fa
commit
6a402551d7
100 ha cambiato i file con 18634 aggiunte e 0 eliminazioni
  1. 89 0
      CHANGELOG.txt
  2. 82 0
      INSTALL.txt
  3. 339 0
      LICENSE.txt
  4. 103 0
      README.txt
  5. 367 0
      SolrPhpClient/Apache/Solr/Document.php
  6. 50 0
      SolrPhpClient/Apache/Solr/Exception.php
  7. 89 0
      SolrPhpClient/Apache/Solr/HttpTransport/Abstract.php
  8. 198 0
      SolrPhpClient/Apache/Solr/HttpTransport/Curl.php
  9. 196 0
      SolrPhpClient/Apache/Solr/HttpTransport/CurlNoReuse.php
  10. 216 0
      SolrPhpClient/Apache/Solr/HttpTransport/FileGetContents.php
  11. 94 0
      SolrPhpClient/Apache/Solr/HttpTransport/Interface.php
  12. 255 0
      SolrPhpClient/Apache/Solr/HttpTransport/Response.php
  13. 79 0
      SolrPhpClient/Apache/Solr/HttpTransportException.php
  14. 50 0
      SolrPhpClient/Apache/Solr/InvalidArgumentException.php
  15. 50 0
      SolrPhpClient/Apache/Solr/NoServiceAvailableException.php
  16. 50 0
      SolrPhpClient/Apache/Solr/ParserException.php
  17. 247 0
      SolrPhpClient/Apache/Solr/Response.php
  18. 1181 0
      SolrPhpClient/Apache/Solr/Service.php
  19. 914 0
      SolrPhpClient/Apache/Solr/Service/Balancer.php
  20. 26 0
      SolrPhpClient/COPYING
  21. 342 0
      SolrPhpClient/ChangeLog
  22. 32 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Document.html
  23. 33 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Exception.html
  24. 31 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransportException.html
  25. 196 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Abstract.html
  26. 336 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Curl.html
  27. 279 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html
  28. 309 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html
  29. 260 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Interface.html
  30. 298 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Response.html
  31. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_InvalidArgumentException.html
  32. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_NoServiceAvailableException.html
  33. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_ParserException.html
  34. 621 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Response.html
  35. 40 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Service.html
  36. 178 0
      SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Service_Balancer.html
  37. 28 0
      SolrPhpClient/phpdocs/Apache/Solr/_Document.php.html
  38. 63 0
      SolrPhpClient/phpdocs/Apache/Solr/_Exception.php.html
  39. 28 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Abstract.php.html
  40. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Curl.php.html
  41. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---CurlNoReuse.php.html
  42. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---FileGetContents.php.html
  43. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Interface.php.html
  44. 28 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Response.php.html
  45. 63 0
      SolrPhpClient/phpdocs/Apache/Solr/_HttpTransportException.php.html
  46. 63 0
      SolrPhpClient/phpdocs/Apache/Solr/_InvalidArgumentException.php.html
  47. 63 0
      SolrPhpClient/phpdocs/Apache/Solr/_NoServiceAvailableException.php.html
  48. 63 0
      SolrPhpClient/phpdocs/Apache/Solr/_ParserException.php.html
  49. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_Response.php.html
  50. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_Service---Balancer.php.html
  51. 29 0
      SolrPhpClient/phpdocs/Apache/Solr/_Service.php.html
  52. 166 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Document.php.html
  53. 70 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Exception.php.html
  54. 109 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportAbstract.php.html
  55. 137 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html
  56. 110 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html
  57. 77 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportException.php.html
  58. 95 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html
  59. 83 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html
  60. 178 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html
  61. 70 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_InvalidArgumentException.php.html
  62. 70 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_NoServiceAvailableException.php.html
  63. 70 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_ParserException.php.html
  64. 109 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Response.php.html
  65. 173 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Service.php.html
  66. 133 0
      SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_ServiceBalancer.php.html
  67. 13 0
      SolrPhpClient/phpdocs/blank.html
  68. 56 0
      SolrPhpClient/phpdocs/classtrees_Apache.html
  69. 1726 0
      SolrPhpClient/phpdocs/elementindex.html
  70. 1723 0
      SolrPhpClient/phpdocs/elementindex_Apache.html
  71. 95 0
      SolrPhpClient/phpdocs/errors.html
  72. 24 0
      SolrPhpClient/phpdocs/index.html
  73. 72 0
      SolrPhpClient/phpdocs/li_Apache.html
  74. 32 0
      SolrPhpClient/phpdocs/media/banner.css
  75. 142 0
      SolrPhpClient/phpdocs/media/stylesheet.css
  76. 29 0
      SolrPhpClient/phpdocs/packages.html
  77. 29 0
      SolrPhpClient/phpdocs/todolist.html
  78. 439 0
      SolrPhpClient/tests/Apache/Solr/DocumentTest.php
  79. 208 0
      SolrPhpClient/tests/Apache/Solr/HttpTransport/AbstractTest.php
  80. 53 0
      SolrPhpClient/tests/Apache/Solr/HttpTransport/CurlNoReuseTest.php
  81. 53 0
      SolrPhpClient/tests/Apache/Solr/HttpTransport/CurlTest.php
  82. 53 0
      SolrPhpClient/tests/Apache/Solr/HttpTransport/FileGetContentsTest.php
  83. 55 0
      SolrPhpClient/tests/Apache/Solr/HttpTransport/ResponseTest.php
  84. 58 0
      SolrPhpClient/tests/Apache/Solr/HttpTransportExceptionTest.php
  85. 194 0
      SolrPhpClient/tests/Apache/Solr/ResponseTest.php
  86. 47 0
      SolrPhpClient/tests/Apache/Solr/Service/BalancerTest.php
  87. 139 0
      SolrPhpClient/tests/Apache/Solr/ServiceAbstractTest.php
  88. 1119 0
      SolrPhpClient/tests/Apache/Solr/ServiceTest.php
  89. 20 0
      SolrPhpClient/tests/README
  90. 28 0
      SolrPhpClient/tests/phpunit.bootstrap.inc
  91. 15 0
      SolrPhpClient/tests/phpunit.xml
  92. 42 0
      SolrPhpClient/tests/run.php
  93. 100 0
      includes/solr_httptransport.inc
  94. 33 0
      includes/spellcheck.inc
  95. 89 0
      search_api_solr.api.php
  96. 18 0
      search_api_solr.info
  97. 154 0
      search_api_solr.install
  98. 145 0
      search_api_solr.module
  99. 1655 0
      service.inc
  100. 7 0
      solr-conf/1.4/protwords.txt

+ 89 - 0
CHANGELOG.txt

@@ -0,0 +1,89 @@
+Search API Solr search 1.x, dev (xx/xx/xxxx):
+---------------------------------------------
+
+Search API Solr search 1.0, RC 3 (01/06/2013):
+----------------------------------------------
+- #1828260 by drunken monkey: Fixed filtering by index in multi-index searches.
+- #1509380 by drunken monkey: Adopt common config files.
+- #1815348 by drunken monkey: Fixed queryMultiple() to not use item ID as the
+  array key.
+- #1789204 by Steven Jones: Added way to easily alter the fl parameter.
+- #1744250 by mollux, dasjo: Added support for location based search.
+- #1813670 by guillaumev: Fixed check for autocomplete configuration in form.
+- #1425910 by drunken monkey, mh86: Added setting for maximum occurence
+  threshold in autocomplete.
+- #1691132 by drunken monkey, David Stosik: Fixed calls to watchdog().
+- #1588130 by regilero, David Stosik, drunken monkey: Fixed error handling.
+- #1805720 by drunken monkey: Added additional options and improvements for the
+  autocomplete functionality.
+- #1276970 by derhasi, moonray: Fixed large queries break Solr search.
+- #1299940 by drunken monkey: Fixed handling of empty response.
+- #1507818 by larowlan: Fixed field boosts for standard request handler.
+
+Search API Solr search 1.0, RC 2 (05/23/2012):
+----------------------------------------------
+- Fixed escaping of error messages.
+- #1480170 by kotnik: Fixed return value of hook_requirements().
+- #1500210 by ezra-g, acrollet, jsacksick: Fixed errors when installing with
+  non-default installation profiles.
+- #1444432 by Damien Tournoud, jsacksick: Added field-level boosting.
+- #1302406 by Steven Jones: Fixed autoload problem during installation.
+- #1340244 by drunken monkey, alanomaly: Added more helpful error messages.
+
+Search API Solr search 1.0, RC 1 (11/10/2011):
+----------------------------------------------
+- #1308638 by drunken monkey: Adapted to new structure of field settings.
+- #1308498 by zenlan, drunken monkey: Added flexibility for facet fields.
+- #1319544 by drunken monkey: Fixed never delete contents of read-only indexes.
+- #1309650 by jonhattan, drunken monkey: Added support for the Libraries API.
+
+Search API Solr search 1.0, Beta 4 (09/08/2011):
+------------------------------------------------
+- #1230536 by thegreat, drunken monkey: Added support for OR facets.
+- #1184002 by drunken monkey: Fixed support of the latest SolrPhpClient version.
+- #1032848 by das-peter, drunken monkey: Added possibility to save SolrPhpClient
+  to the libraries directory.
+- #1225926 by drunken monkey, fago: Fixed performance problems in indexing
+  workflow.
+- #1219310 by drunken monkey: Adapted to recent API change.
+- #1203680 by klausi: Fixed use of taxonomy terms for "More like this".
+- #1181260 by klausi: Fixed mlt.maxwl in solrconfig.xml.
+- #1116896 by drunken monkey: Adapted to newer Solr versions.
+- #1190462 by drunken monkey: Added option to directly highlight retrieved data
+  from Solr.
+- #1196514 by drunken monkey, klausi: Fixed case sensitivity of input keys for
+  autocomplete.
+- #1192654 by drunken monkey: Added support for the Autocomplete module.
+- #1177648 by drunken monkey: Added option to use Solr's built-in highlighting.
+- #1154116 by drunken monkey: Added option for retrieving search results data
+  directly from Solr.
+- #1184002 by drunken monkey: Fixed INSTALL.txt to reflect that the module
+  doesn't work with the latest Solr PHP Client version.
+
+Search API Solr search 1.0, Beta 3 (06/06/2011):
+------------------------------------------------
+- #1111852 by miiimooo, drunken monkey: Added a 'More like this' feature.
+- #1153306 by JoeMcGuire, drunken monkey: Added spellchecking support.
+- #1138230 by becw, drunken monkey: Added increased flexibility to the service
+  class.
+- #1127038 by drunken monkey: Fixed handling of date facets.
+- #1110820 by becw, drunken monkey: Added support for the Luke request handler.
+- #1095956 by drunken monkey: Added Solr-specific index alter hook.
+
+Search API Solr search 1.0, Beta 2 (03/04/2011):
+------------------------------------------------
+- #1071894 by drunken monkey: Fixed incorrect handling of boolean facets.
+- #1071796: Add additional help for Solr-specific extensions.
+- #1056018: Better document Solr config customization options.
+- #1049900: Field values are sometimes not escaped properly.
+- #1043586: Allow Solr server URL to be altered.
+- #1010610 by mikejoconnor: Fix hook_requirements().
+- #1024146: Don't use file_get_contents() for contacting the Solr server.
+- #1010610: More helpful error message when SolrPhpClient is missing.
+- #915174: Remove unnecessary files[] declarations from .info file.
+- #984134: Add Solr-specific query alter hooks.
+
+Search API Solr search 1.0, Beta 1 (11/29/2010):
+------------------------------------------------
+Basic functionality is in place and quite well-tested, including support for
+facets and for multi-index searches.

+ 82 - 0
INSTALL.txt

@@ -0,0 +1,82 @@
+Prerequisite:
+- Java 6 or higher
+
+Steps necessary:
+- Download Solr PHP client
+- Setting up Solr
+
+Download Solr PHP client
+------------------------
+
+This module uses an external PHP library for communicating with Solr servers. Go
+to [1] and download version r60 of this library. (The older version r22 is also
+still supported, but this might change in the future.)
+
+[1] http://code.google.com/p/solr-php-client/downloads/list
+
+Afterwards, unpack this archive to Drupal's libraries folder, so the directory
+tree looks like this:
+
+DRUPAL_ROOT/sites/all/libraries/
+  |- SolrPhpClient
+     |- Apache/
+     |- ChangeLog
+     ...
+
+The library should then be found by the module.
+
+Note: If you have the Libraries API [2] module installed, you can also place the
+library into any other directory recognized by the Libraries API, e.g.
+(depending on the module version):
+- DRUPAL_ROOT/libraries
+- DRUPAL_ROOT/profiles/PROFILE/libraries
+- DRUPAL_ROOT/sites/CONF_DIR/libraries
+
+[2] http://drupal.org/project/libraries
+
+Setting up Solr
+---------------
+
+In order for this module to work, you will first need to set up a Solr server.
+For this, you can either purchase a server from a web Solr hosts or set up your
+own Solr server on your web server (if you have the necessary rights to do so).
+If you want to use a hosted solution, a number of companies are listed on the
+module's project page [3]. Otherwise, please follow the instructions below.
+
+[3] http://drupal.org/project/search_api_solr
+
+Download the latest version of Solr 3.x from [4] and unpack the archive
+somewhere outside of your web server's document tree.
+
+[4] http://www.apache.org/dyn/closer.cgi/lucene/solr/
+
+This module also supports Solr 1.4, but its use is discouraged due to worse
+performance and some features not being supported. Solr 4.x is not supported by
+this module yet.
+
+For small websites, using the example application, located in $SOLR/example/,
+usually suffices. In any case, you can use it for developing andd testing. The
+following instructions will assume you are using the example application,
+otherwise you should be able to substitute the corresponding paths.
+
+Before starting the Solr server you will have to make sure it uses the proper
+configuration files. These are located in the solr-conf/ directory in this
+module, in a sub-directory according to the Solr version you are using. Copy all
+the files from that directory into Solr's configuration directory
+($SOLR/example/solr/conf/ in case of the example application), after backing up
+all files that would be overwritten.
+You can then start Solr. For the example application, go to $SOLR/example/ and
+issue the following command (assuming Java is correctly installed):
+
+java -jar start.jar
+
+Afterwards, go to [5] in your web browser to ensure Solr is running correctly.
+
+[5] http://localhost:8983/solr/admin/
+
+You can then enable this module and create a new server, using the "Solr search"
+service class. Enter the hostname, port and path corresponding to your Solr
+server in the appropriate fields. The default values already correspond to the
+example application, so you won't have to change the values if you use that.
+If you are using HTTP Authentication to protect your Solr server you also have
+to provide the appropriate user and password here.

+ 339 - 0
LICENSE.txt

@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.

+ 103 - 0
README.txt

@@ -0,0 +1,103 @@
+Solr search
+-----------
+
+This module provides an implementation of the Search API which uses an Apache
+Solr search server for indexing and searching. Before enabling or using this
+module, you'll have to follow the instructions given in INSTALL.txt first.
+
+Supported optional features
+---------------------------
+
+All Search API datatypes are supported by using appropriate Solr datatypes for
+indexing them. By default, "String"/"URI" and "Integer"/"Duration" are defined
+equivalently. However, through manual configuration of the used schema.xml this
+can be changed arbitrarily. Using your own Solr extensions is thereby also
+possible.
+
+The "direct" parse mode for queries will result in the keys being directly used
+as the query to Solr. For details about Lucene's query syntax, see [1]. There
+are also some Solr additions to this, listed at [2]. Note however that, by
+default, this module uses the dismax query handler, so searches like
+"field:value" won't work with the "direct" mode.
+
+[1] http://lucene.apache.org/java/2_9_1/queryparsersyntax.html
+[2] http://wiki.apache.org/solr/SolrQuerySyntax
+
+Regarding third-party features, the following are supported:
+
+- search_api_autocomplete
+  Introduced by module: search_api_autocomplete
+  Lets you add autocompletion capabilities to search forms on the site. (See
+  also "Hidden variables" below for Solr-specific customization.)
+- search_api_facets
+  Introduced by module: search_api_facetapi
+  Allows you to create facetted searches for dynamically filtering search
+  results.
+- search_api_facets_operator_or
+  Introduced by module: search_api_facetapi
+  Allows the creation of OR facets.
+- search_api_mlt
+  Introduced by module: search_api_views
+  Lets you display items that are similar to a given one. Use, e.g., to create
+  a "More like this" block for node pages.
+- search_api_multi
+  Introduced by module: search_api_multi
+  Allows you to search multiple indexes at once, as long as they are on the same
+  server. You can use this to let users simultaneously search all content on the
+  site – nodes, comments, user profiles, etc.
+- search_api_spellcheck
+  Introduced by module: search_api_spellcheck
+  Gives the option to display automatic spellchecking for searches.
+
+If you feel some service option is missing, or have other ideas for improving
+this implementation, please file a feature request in the project's issue queue,
+at [3].
+
+[3] http://drupal.org/project/issues/search_api_solr
+
+Specifics
+---------
+
+Please consider that, since Solr handles tokenizing, stemming and other
+preprocessing tasks, activating any preprocessors in a search index' settings is
+usually not needed or even cumbersome. If you are adding an index to a Solr
+server you should therefore then disable all processors which handle such
+classic preprocessing tasks.
+
+Also, due to the way Solr works, using a single field for fulltext searching
+will result in the smallest index size and best search performance, as well as
+possibly having other advantages, too. Therefore, if you don't need to search
+different sets of fields in different searches on an index, it is adviced that
+you collect all fields that should be searchable into a single field using the
+“Aggregated fields” data alteration.
+
+Hidden variables
+----------------
+
+- search_api_solr_autocomplete_max_occurrences (default: 0.9)
+  By default, keywords that occur in more than 90% of results are ignored for
+  autocomplete suggestions. This setting lets you modify that behaviour by
+  providing your own ratio. Use 1 or greater to use all suggestions.
+
+Customizing your Solr server
+----------------------------
+
+The schema.xml and solrconfig.xml files contain extensive comments on how to
+add additional features or modify behaviour, e.g., for adding a language-
+specific stemmer or a stopword list.
+If you are interested in further customizing your Solr server to your needs,
+see the Solr wiki at [4] for documentation. When editing the schema.xml and
+solrconfig.xml files, please only edit the copies in the Solr configuration
+directory, not directly the ones provided with this module.
+
+[4] http://wiki.apache.org/solr/
+
+You'll have to restart your Solr server after making such changes, for them to
+take effect.
+
+Developers
+----------
+
+The SearchApiSolrService class has a few custom extensions, documented with its
+code. Methods of note are deleteItems(), which treats the first argument
+differently in certain cases, and the methods at the end of service.inc.

+ 367 - 0
SolrPhpClient/Apache/Solr/Document.php

@@ -0,0 +1,367 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: Document.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Holds Key / Value pairs that represent a Solr Document along with any associated boost
+ * values. Field values can be accessed by direct dereferencing such as:
+ * <code>
+ * ...
+ * $document->title = 'Something';
+ * echo $document->title;
+ * ...
+ * </code>
+ *
+ * Additionally, the field values can be iterated with foreach
+ *
+ * <code>
+ * foreach ($document as $fieldName => $fieldValue)
+ * {
+ * ...
+ * }
+ * </code>
+ */
+class Apache_Solr_Document implements IteratorAggregate
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: Document.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+
+	/**
+	 * Document boost value
+	 *
+	 * @var float
+	 */
+	protected $_documentBoost = false;
+
+	/**
+	 * Document field values, indexed by name
+	 *
+	 * @var array
+	 */
+	protected $_fields = array();
+
+	/**
+	 * Document field boost values, indexed by name
+	 *
+	 * @var array array of floats
+	 */
+	protected $_fieldBoosts = array();
+
+	/**
+	 * Clear all boosts and fields from this document
+	 */
+	public function clear()
+	{
+		$this->_documentBoost = false;
+
+		$this->_fields = array();
+		$this->_fieldBoosts = array();
+	}
+
+	/**
+	 * Get current document boost
+	 *
+	 * @return mixed will be false for default, or else a float
+	 */
+	public function getBoost()
+	{
+		return $this->_documentBoost;
+	}
+
+	/**
+	 * Set document boost factor
+	 *
+	 * @param mixed $boost Use false for default boost, else cast to float that should be > 0 or will be treated as false
+	 */
+	public function setBoost($boost)
+	{
+		$boost = (float) $boost;
+
+		if ($boost > 0.0)
+		{
+			$this->_documentBoost = $boost;
+		}
+		else
+		{
+			$this->_documentBoost = false;
+		}
+	}
+
+	/**
+	 * Add a value to a multi-valued field
+	 *
+	 * NOTE: the solr XML format allows you to specify boosts
+	 * PER value even though the underlying Lucene implementation
+	 * only allows a boost per field. To remedy this, the final
+	 * field boost value will be the product of all specified boosts
+	 * on field values - this is similar to SolrJ's functionality.
+	 *
+	 * <code>
+	 * $doc = new Apache_Solr_Document();
+	 *
+	 * $doc->addField('foo', 'bar', 2.0);
+	 * $doc->addField('foo', 'baz', 3.0);
+	 *
+	 * // resultant field boost will be 6!
+	 * echo $doc->getFieldBoost('foo');
+	 * </code>
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param mixed $boost Use false for default boost, else cast to float that should be > 0 or will be treated as false
+	 */
+	public function addField($key, $value, $boost = false)
+	{
+		if (!isset($this->_fields[$key]))
+		{
+			// create holding array if this is the first value
+			$this->_fields[$key] = array();
+		}
+		else if (!is_array($this->_fields[$key]))
+		{
+			// move existing value into array if it is not already an array
+			$this->_fields[$key] = array($this->_fields[$key]);
+		}
+
+		if ($this->getFieldBoost($key) === false)
+		{
+			// boost not already set, set it now
+			$this->setFieldBoost($key, $boost);
+		}
+		else if ((float) $boost > 0.0)
+		{
+			// multiply passed boost with current field boost - similar to SolrJ implementation
+			$this->_fieldBoosts[$key] *= (float) $boost;
+		}
+
+		// add value to array
+		$this->_fields[$key][] = $value;
+	}
+
+	/**
+	 * Handle the array manipulation for a multi-valued field
+	 *
+	 * @param string $key
+	 * @param string $value
+	 * @param mixed $boost Use false for default boost, else cast to float that should be > 0 or will be treated as false
+	 *
+	 * @deprecated Use addField(...) instead
+	 */
+	public function setMultiValue($key, $value, $boost = false)
+	{
+		$this->addField($key, $value, $boost);
+	}
+
+	/**
+	 * Get field information
+	 *
+	 * @param string $key
+	 * @return mixed associative array of info if field exists, false otherwise
+	 */
+	public function getField($key)
+	{
+		if (isset($this->_fields[$key]))
+		{
+			return array(
+				'name' => $key,
+				'value' => $this->_fields[$key],
+				'boost' => $this->getFieldBoost($key)
+			);
+		}
+
+		return false;
+	}
+
+	/**
+	 * Set a field value. Multi-valued fields should be set as arrays
+	 * or instead use the addField(...) function which will automatically
+	 * make sure the field is an array.
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 * @param mixed $boost Use false for default boost, else cast to float that should be > 0 or will be treated as false
+	 */
+	public function setField($key, $value, $boost = false)
+	{
+		$this->_fields[$key] = $value;
+		$this->setFieldBoost($key, $boost);
+	}
+
+	/**
+	 * Get the currently set field boost for a document field
+	 *
+	 * @param string $key
+	 * @return float currently set field boost, false if one is not set
+	 */
+	public function getFieldBoost($key)
+	{
+		return isset($this->_fieldBoosts[$key]) ? $this->_fieldBoosts[$key] : false;
+	}
+
+	/**
+	 * Set the field boost for a document field
+	 *
+	 * @param string $key field name for the boost
+	 * @param mixed $boost Use false for default boost, else cast to float that should be > 0 or will be treated as false
+	 */
+	public function setFieldBoost($key, $boost)
+	{
+		$boost = (float) $boost;
+
+		if ($boost > 0.0)
+		{
+			$this->_fieldBoosts[$key] = $boost;
+		}
+		else
+		{
+			$this->_fieldBoosts[$key] = false;
+		}
+	}
+
+	/**
+	 * Return current field boosts, indexed by field name
+	 *
+	 * @return array
+	 */
+	public function getFieldBoosts()
+	{
+		return $this->_fieldBoosts;
+	}
+
+	/**
+	 * Get the names of all fields in this document
+	 *
+	 * @return array
+	 */
+	public function getFieldNames()
+	{
+		return array_keys($this->_fields);
+	}
+
+	/**
+	 * Get the values of all fields in this document
+	 *
+	 * @return array
+	 */
+	public function getFieldValues()
+	{
+		return array_values($this->_fields);
+	}
+
+	/**
+	 * IteratorAggregate implementation function. Allows usage:
+	 *
+	 * <code>
+	 * foreach ($document as $key => $value)
+	 * {
+	 * 	...
+	 * }
+	 * </code>
+	 */
+	public function getIterator()
+	{
+		$arrayObject = new ArrayObject($this->_fields);
+
+		return $arrayObject->getIterator();
+	}
+
+	/**
+	 * Magic get for field values
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		if (isset($this->_fields[$key]))
+		{
+			return $this->_fields[$key];
+		}
+		
+		return null;
+	}
+
+	/**
+	 * Magic set for field values. Multi-valued fields should be set as arrays
+	 * or instead use the addField(...) function which will automatically
+	 * make sure the field is an array.
+	 *
+	 * @param string $key
+	 * @param mixed $value
+	 */
+	public function __set($key, $value)
+	{
+		$this->setField($key, $value);
+	}
+
+	/**
+	 * Magic isset for fields values.  Do not call directly. Allows usage:
+	 *
+	 * <code>
+	 * isset($document->some_field);
+	 * </code>
+	 *
+	 * @param string $key
+	 * @return boolean
+	 */
+	public function __isset($key)
+	{
+		return isset($this->_fields[$key]);
+	}
+
+	/**
+	 * Magic unset for field values. Do not call directly. Allows usage:
+	 *
+	 * <code>
+	 * unset($document->some_field);
+	 * </code>
+	 *
+	 * @param string $key
+	 */
+	public function __unset($key)
+	{
+		unset($this->_fields[$key]);
+		unset($this->_fieldBoosts[$key]);
+	}
+}

+ 50 - 0
SolrPhpClient/Apache/Solr/Exception.php

@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: Exception.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+class Apache_Solr_Exception extends Exception
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: Exception.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+}

+ 89 - 0
SolrPhpClient/Apache/Solr/HttpTransport/Abstract.php

@@ -0,0 +1,89 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Timo Schmidt <timo.schmidt@aoemedia.de>, Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Convenience class that implements the transport implementation. Can be extended by
+ * real implementations to do some of the common book keeping
+ */
+abstract class Apache_Solr_HttpTransport_Abstract implements Apache_Solr_HttpTransport_Interface
+{	
+	/**
+	 * Our default timeout value for requests that don't specify a timeout
+	 *
+	 * @var float
+	 */
+	private $_defaultTimeout = false;
+		
+	/**
+	 * Get the current default timeout setting (initially the default_socket_timeout ini setting)
+	 * in seconds
+	 *
+	 * @return float
+	 */
+	public function getDefaultTimeout()
+	{
+		// lazy load the default timeout from the ini settings
+		if ($this->_defaultTimeout === false)
+		{
+			$this->_defaultTimeout = (int) ini_get('default_socket_timeout');
+
+			// double check we didn't get 0 for a timeout
+			if ($this->_defaultTimeout <= 0)
+			{
+				$this->_defaultTimeout = 60;
+			}
+		}
+		
+		return $this->_defaultTimeout;
+	}
+	
+	/**
+	 * Set the current default timeout for all HTTP requests
+	 *
+	 * @param float $timeout
+	 */
+	public function setDefaultTimeout($timeout)
+	{
+		$timeout = (float) $timeout;
+		
+		if ($timeout >= 0)
+		{
+			$this->_defaultTimeout = $timeout;
+		}
+	}	
+}

+ 198 - 0
SolrPhpClient/Apache/Solr/HttpTransport/Curl.php

@@ -0,0 +1,198 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Timo Schmidt <timo.schmidt@aoemedia.de>, Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+// Require Apache_Solr_HttpTransport_Abstract
+require_once(dirname(__FILE__) . '/Abstract.php');
+
+/**
+ * A Curl based HTTP transport. Uses a single curl session for all requests.
+ */
+class Apache_Solr_HttpTransport_Curl extends Apache_Solr_HttpTransport_Abstract
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision:$';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id:$';
+
+	/**
+	 * Curl Session Handle
+	 *
+	 * @var resource
+	 */
+	private $_curl;
+
+	/**
+	 * Initializes a curl session
+	 */
+	public function __construct()
+	{
+		// initialize a CURL session
+		$this->_curl = curl_init();
+
+		// set common options that will not be changed during the session
+		curl_setopt_array($this->_curl, array(
+			// return the response body from curl_exec
+			CURLOPT_RETURNTRANSFER => true,
+
+			// get the output as binary data
+			CURLOPT_BINARYTRANSFER => true,
+
+			// we do not need the headers in the output, we get everything we need from curl_getinfo
+			CURLOPT_HEADER => false
+		));
+	}
+
+	/**
+	 * Closes a curl session
+	 */
+	function __destruct()
+	{
+		// close our curl session
+		curl_close($this->_curl);
+	}
+
+	public function performGetRequest($url, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+
+		// set curl GET options
+		curl_setopt_array($this->_curl, array(
+			// make sure we're returning the body
+			CURLOPT_NOBODY => false,
+
+			// make sure we're GET
+			CURLOPT_HTTPGET => true,
+
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($this->_curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($this->_curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($this->_curl, CURLINFO_CONTENT_TYPE);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+
+	public function performHeadRequest($url, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+
+		// set curl HEAD options
+		curl_setopt_array($this->_curl, array(
+			// this both sets the method to HEAD and says not to return a body
+			CURLOPT_NOBODY => true,
+
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($this->_curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($this->_curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($this->_curl, CURLINFO_CONTENT_TYPE);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+
+	public function performPostRequest($url, $postData, $contentType, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+
+		// set curl POST options
+		curl_setopt_array($this->_curl, array(
+			// make sure we're returning the body
+			CURLOPT_NOBODY => false,
+
+			// make sure we're POST
+			CURLOPT_POST => true,
+
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the post data
+			CURLOPT_POSTFIELDS => $postData,
+
+			// set the content type
+			CURLOPT_HTTPHEADER => array("Content-Type: {$contentType}"),
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($this->_curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($this->_curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($this->_curl, CURLINFO_CONTENT_TYPE);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+}

+ 196 - 0
SolrPhpClient/Apache/Solr/HttpTransport/CurlNoReuse.php

@@ -0,0 +1,196 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Timo Schmidt <timo.schmidt@aoemedia.de>, Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+// Require Apache_Solr_HttpTransport_Abstract
+require_once(dirname(__FILE__) . '/Abstract.php');
+
+/**
+ * An alternative Curl HTTP transport that opens and closes a curl session for
+ * every request. This isn't the recommended way to use curl, but some version of
+ * PHP have memory issues.
+ */
+class Apache_Solr_HttpTransport_CurlNoReuse extends Apache_Solr_HttpTransport_Abstract
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision:$';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id:$';
+
+	public function performGetRequest($url, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+		
+		$curl = curl_init();
+
+		// set curl GET options
+		curl_setopt_array($curl, array(
+			// return the response body from curl_exec
+			CURLOPT_RETURNTRANSFER => true,
+
+			// get the output as binary data
+			CURLOPT_BINARYTRANSFER => true,
+
+			// we do not need the headers in the output, we get everything we need from curl_getinfo
+			CURLOPT_HEADER => false,
+			
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
+		
+		// close our curl session - we're done with it
+		curl_close($curl);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+
+	public function performHeadRequest($url, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+		
+		$curl = curl_init();
+
+		// set curl HEAD options
+		curl_setopt_array($curl, array(
+			// return the response body from curl_exec
+			CURLOPT_RETURNTRANSFER => true,
+
+			// get the output as binary data
+			CURLOPT_BINARYTRANSFER => true,
+
+			// we do not need the headers in the output, we get everything we need from curl_getinfo
+			CURLOPT_HEADER => false,
+			
+			// this both sets the method to HEAD and says not to return a body
+			CURLOPT_NOBODY => true,
+
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
+		
+		// close our curl session - we're done with it
+		curl_close($curl);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+
+	public function performPostRequest($url, $postData, $contentType, $timeout = false)
+	{
+		// check the timeout value
+		if ($timeout === false || $timeout <= 0.0)
+		{
+			// use the default timeout
+			$timeout = $this->getDefaultTimeout();
+		}
+
+		$curl = curl_init();
+		
+		// set curl POST options
+		curl_setopt_array($curl, array(
+			// return the response body from curl_exec
+			CURLOPT_RETURNTRANSFER => true,
+
+			// get the output as binary data
+			CURLOPT_BINARYTRANSFER => true,
+
+			// we do not need the headers in the output, we get everything we need from curl_getinfo
+			CURLOPT_HEADER => false,
+			
+			// make sure we're POST
+			CURLOPT_POST => true,
+
+			// set the URL
+			CURLOPT_URL => $url,
+
+			// set the post data
+			CURLOPT_POSTFIELDS => $postData,
+
+			// set the content type
+			CURLOPT_HTTPHEADER => array("Content-Type: {$contentType}"),
+
+			// set the timeout
+			CURLOPT_TIMEOUT => $timeout
+		));
+
+		// make the request
+		$responseBody = curl_exec($curl);
+
+		// get info from the transfer
+		$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+		$contentType = curl_getinfo($curl, CURLINFO_CONTENT_TYPE);
+
+		// close our curl session - we're done with it
+		curl_close($curl);
+
+		return new Apache_Solr_HttpTransport_Response($statusCode, $contentType, $responseBody);
+	}
+}

+ 216 - 0
SolrPhpClient/Apache/Solr/HttpTransport/FileGetContents.php

@@ -0,0 +1,216 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+// Require Apache_Solr_HttpTransport_Abstract
+require_once(dirname(__FILE__) . '/Abstract.php');
+
+/**
+ * HTTP Transport implemenation that uses the builtin http URL wrappers and file_get_contents
+ */
+class Apache_Solr_HttpTransport_FileGetContents extends Apache_Solr_HttpTransport_Abstract
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision:  $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id:  $';
+		
+	/**
+	 * Reusable stream context resources for GET and POST operations
+	 *
+	 * @var resource
+	 */
+	private $_getContext, $_headContext, $_postContext;
+	
+	/**
+	 * Initializes our reuseable get and post stream contexts
+	 */
+	public function __construct()
+	{
+		$this->_getContext = stream_context_create();
+		$this->_headContext = stream_context_create();
+		$this->_postContext = stream_context_create();
+	}
+
+	public function performGetRequest($url, $timeout = false)
+	{
+		// set the timeout if specified
+		if ($timeout !== FALSE && $timeout > 0.0)
+		{
+			// timeouts with file_get_contents seem to need
+			// to be halved to work as expected
+			$timeout = (float) $timeout / 2;
+
+			stream_context_set_option($this->_getContext, 'http', 'timeout', $timeout);
+		}
+		else
+		{
+			// use the default timeout pulled from default_socket_timeout otherwise
+			stream_context_set_option($this->_getContext, 'http', 'timeout', $this->getDefaultTimeout());
+		}
+
+		// $http_response_headers will be updated by the call to file_get_contents later
+		// see http://us.php.net/manual/en/wrappers.http.php for documentation
+		// Unfortunately, it will still create a notice in analyzers if we don't set it here
+		$http_response_header = null;
+		$responseBody = @file_get_contents($url, false, $this->_getContext);
+		
+		return $this->_getResponseFromParts($responseBody, $http_response_header);
+	}
+
+	public function performHeadRequest($url, $timeout = false)
+	{
+		stream_context_set_option($this->_headContext, array(
+				'http' => array(
+					// set HTTP method
+					'method' => 'HEAD',
+
+					// default timeout
+					'timeout' => $this->getDefaultTimeout()
+				)
+			)
+		);
+
+		// set the timeout if specified
+		if ($timeout !== FALSE && $timeout > 0.0)
+		{
+			// timeouts with file_get_contents seem to need
+			// to be halved to work as expected
+			$timeout = (float) $timeout / 2;
+
+			stream_context_set_option($this->_headContext, 'http', 'timeout', $timeout);
+		}
+		
+		// $http_response_headers will be updated by the call to file_get_contents later
+		// see http://us.php.net/manual/en/wrappers.http.php for documentation
+		// Unfortunately, it will still create a notice in analyzers if we don't set it here
+		$http_response_header = null;
+		$responseBody = @file_get_contents($url, false, $this->_headContext);
+
+		return $this->_getResponseFromParts($responseBody, $http_response_header);
+	}
+	
+	public function performPostRequest($url, $rawPost, $contentType, $timeout = false)
+	{
+		stream_context_set_option($this->_postContext, array(
+				'http' => array(
+					// set HTTP method
+					'method' => 'POST',
+
+					// Add our posted content type
+					'header' => "Content-Type: $contentType",
+
+					// the posted content
+					'content' => $rawPost,
+
+					// default timeout
+					'timeout' => $this->getDefaultTimeout()
+				)
+			)
+		);
+
+		// set the timeout if specified
+		if ($timeout !== FALSE && $timeout > 0.0)
+		{
+			// timeouts with file_get_contents seem to need
+			// to be halved to work as expected
+			$timeout = (float) $timeout / 2;
+
+			stream_context_set_option($this->_postContext, 'http', 'timeout', $timeout);
+		}
+
+		// $http_response_header will be updated by the call to file_get_contents later
+		// see http://us.php.net/manual/en/wrappers.http.php for documentation
+		// Unfortunately, it will still create a notice in analyzers if we don't set it here
+		$http_response_header = null;
+		$responseBody = @file_get_contents($url, false, $this->_postContext);
+		
+		// reset content of post context to reclaim memory
+		stream_context_set_option($this->_postContext, 'http', 'content', '');
+		
+		return $this->_getResponseFromParts($responseBody, $http_response_header);
+	}
+	
+	private function _getResponseFromParts($rawResponse, $httpHeaders)
+	{
+		//Assume 0, false as defaults
+		$status = 0;
+		$contentType = false;
+
+		//iterate through headers for real status, type, and encoding
+		if (is_array($httpHeaders) && count($httpHeaders) > 0)
+		{
+			//look at the first headers for the HTTP status code
+			//and message (errors are usually returned this way)
+			//
+			//HTTP 100 Continue response can also be returned before
+			//the REAL status header, so we need look until we find
+			//the last header starting with HTTP
+			//
+			//the spec: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1
+			//
+			//Thanks to Daniel Andersson for pointing out this oversight
+			while (isset($httpHeaders[0]) && substr($httpHeaders[0], 0, 4) == 'HTTP')
+			{
+				// we can do a intval on status line without the "HTTP/1.X " to get the code
+				$status = intval(substr($httpHeaders[0], 9));
+
+				// remove this from the headers so we can check for more
+				array_shift($httpHeaders);
+			}
+
+			//Look for the Content-Type response header and determine type
+			//and encoding from it (if possible - such as 'Content-Type: text/plain; charset=UTF-8')
+			foreach ($httpHeaders as $header)
+			{
+				// look for the header that starts appropriately
+				if (strncasecmp($header, 'Content-Type:', 13) == 0)
+				{
+					$contentType = substr($header, 13);
+					break;
+				}
+			}
+		}
+		
+		return new Apache_Solr_HttpTransport_Response($status, $contentType, $rawResponse);
+	}
+}

+ 94 - 0
SolrPhpClient/Apache/Solr/HttpTransport/Interface.php

@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Timo Schmidt <timo.schmidt@aoemedia.de>, Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+// require Apache_Solr_HttpTransport_Response
+require_once(dirname(__FILE__) . '/Response.php');
+
+/**
+ * Interface that all Transport (HTTP Requester) implementations must implement. These
+ * Implementations can then be plugged into the Service instance in order to user their
+ * the desired method for making HTTP requests
+ */
+interface Apache_Solr_HttpTransport_Interface
+{
+	/**
+	 * Get the current default timeout for all HTTP requests
+	 *
+	 * @return float
+	 */
+	public function getDefaultTimeout();
+	
+	/**
+	 * Set the current default timeout for all HTTP requests
+	 *
+	 * @param float $timeout
+	 */
+	public function setDefaultTimeout($timeout);
+		
+	/**
+	 * Perform a GET HTTP operation with an optional timeout and return the response
+	 * contents, use getLastResponseHeaders to retrieve HTTP headers
+	 *
+	 * @param string $url
+	 * @param float $timeout
+	 * @return Apache_Solr_HttpTransport_Response HTTP response
+	 */
+	public function performGetRequest($url, $timeout = false);
+	
+	/**
+	 * Perform a HEAD HTTP operation with an optional timeout and return the response
+	 * headers - NOTE: head requests have no response body
+	 *
+	 * @param string $url
+	 * @param float $timeout
+	 * @return Apache_Solr_HttpTransport_Response HTTP response
+	 */
+	public function performHeadRequest($url, $timeout = false);
+	
+	/**
+	 * Perform a POST HTTP operation with an optional timeout and return the response
+	 * contents, use getLastResponseHeaders to retrieve HTTP headers
+	 *
+	 * @param string $url
+	 * @param string $rawPost
+	 * @param string $contentType
+	 * @param float $timeout
+	 * @return Apache_Solr_HttpTransport_Response HTTP response
+	 */
+	public function performPostRequest($url, $rawPost, $contentType, $timeout = false);
+}

+ 255 - 0
SolrPhpClient/Apache/Solr/HttpTransport/Response.php

@@ -0,0 +1,255 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Represents the required pieces of an HTTP response provided by HTTP transport
+ * implementations and then consumed by the Apache_Solr_Response class which provides
+ * decoding
+ */
+class Apache_Solr_HttpTransport_Response
+{
+	/**
+	 * Status Messages indexed by Status Code
+	 * Obtained from: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
+	 *
+	 * @var array
+	 */
+	static private $_defaultStatusMessages = array(
+		// Specific to PHP Solr Client
+		0 => "Communication Error",
+		
+		// Informational 1XX
+		100 => "Continue",
+		101 => "Switching Protocols",
+		
+		// Successful 2XX
+		200 => "OK",
+		201 => "Created",
+		202 => "Accepted",
+		203 => "Non-Authoritative Information",
+		204 => "No Content",
+		205 => "Reset Content",
+		206 => "Partial Content",
+		
+		// Redirection 3XX
+		300 => "Multiple Choices",
+		301 => "Moved Permanently",
+		302 => "Found",
+		303 => "See Other",
+		304 => "Not Modified",
+		305 => "Use Proxy",
+		307 => "Temporary Redirect",
+		
+		// Client Error 4XX
+		400 => "Bad Request",
+		401 => "Unauthorized",
+		402 => "Payment Required",
+		403 => "Forbidden",
+		404 => "Not Found",
+		405 => "Method Not Allowed",
+		406 => "Not Acceptable",
+		407 => "Proxy Authentication Required",
+		408 => "Request Timeout",
+		409 => "Conflict",
+		410 => "Gone",
+		411 => "Length Required",
+		412 => "Precondition Failed",
+		413 => "Request Entity Too Large",
+		414 => "Request-URI Too Long",
+		415 => "Unsupported Media Type",
+		416 => "Request Range Not Satisfiable",
+		417 => "Expectation Failed",
+		
+		// Server Error 5XX
+		500 => "Internal Server Error",
+		501 => "Not Implemented",
+		502 => "Bad Gateway",
+		503 => "Service Unavailable",
+		504 => "Gateway Timeout",
+		505 => "HTTP Version Not Supported"
+	);
+	
+	/**
+	 * Get the HTTP status message based on status code
+	 *
+	 * @return string
+	 */
+	public static function getDefaultStatusMessage($statusCode)
+	{
+		$statusCode = (int) $statusCode;
+		
+		if (isset(self::$_defaultStatusMessages[$statusCode]))
+		{
+			return self::$_defaultStatusMessages[$statusCode];
+		}
+		
+		return "Unknown Status";
+	}
+	
+	/**
+	 * The response's HTTP status code
+	 *
+	 * @var integer
+	 */
+	private $_statusCode;
+	
+	/**
+	 * The response's HTTP status message
+	 *
+	 * @var string
+	 */
+	private $_statusMessage;
+	
+	/**
+	 * The response's mime type
+	 *
+	 * @var string
+	 */
+	private $_mimeType;
+	
+	/**
+	 * The response's character encoding
+	 *
+	 * @var string
+	 */
+	private $_encoding;
+	
+	/**
+	 * The response's data
+	 *
+	 * @var string
+	 */
+	private $_responseBody;
+	
+	/**
+	 * Construct a HTTP transport response
+	 * 
+	 * @param integer $statusCode The HTTP status code
+	 * @param string $contentType The VALUE of the Content-Type HTTP header
+	 * @param string $responseBody The body of the HTTP response
+	 */
+	public function __construct($statusCode, $contentType, $responseBody)
+	{
+		// set the status code, make sure its an integer
+		$this->_statusCode = (int) $statusCode;
+		
+		// lookup up status message based on code
+		$this->_statusMessage = self::getDefaultStatusMessage($this->_statusCode);
+		
+		// set the response body, it should always be a string
+		$this->_responseBody = (string) $responseBody;
+		
+		// parse the content type header value for mimetype and encoding
+		// first set default values that will remain if we can't find
+		// what we're looking for in the content type
+		$this->_mimeType = "text/plain";
+		$this->_encoding = "UTF-8";
+		
+		if ($contentType)
+		{
+			// now break apart the header to see if there's character encoding
+			$contentTypeParts = explode(';', $contentType, 2);
+
+			if (isset($contentTypeParts[0]))
+			{
+				$this->_mimeType = trim($contentTypeParts[0]);
+			}
+
+			if (isset($contentTypeParts[1]))
+			{
+				// we have a second part, split it further
+				$contentTypeParts = explode('=', $contentTypeParts[1]);
+
+				if (isset($contentTypeParts[1]))
+				{
+					$this->_encoding = trim($contentTypeParts[1]);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Get the status code of the response
+	 *
+	 * @return integer
+	 */
+	public function getStatusCode()
+	{
+		return $this->_statusCode;
+	}
+	
+	/**
+	 * Get the status message of the response
+	 *
+	 * @return string
+	 */
+	public function getStatusMessage()
+	{
+		return $this->_statusMessage;
+	}
+	
+	/**
+	 * Get the mimetype of the response body
+	 *
+	 * @return string
+	 */
+	public function getMimeType()
+	{
+		return $this->_mimeType;
+	}
+	
+	/**
+	 * Get the charset encoding of the response body.
+	 *
+	 * @return string
+	 */
+	public function getEncoding()
+	{
+		return $this->_encoding;
+	}
+	
+	/**
+	 * Get the raw response body
+	 *
+	 * @return string
+	 */
+	public function getBody()
+	{
+		return $this->_responseBody;
+	}
+}

+ 79 - 0
SolrPhpClient/Apache/Solr/HttpTransportException.php

@@ -0,0 +1,79 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: HttpTransportException.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+class Apache_Solr_HttpTransportException extends Apache_Solr_Exception
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: HttpTransportException.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+
+	/**
+	 * Response for which exception was generated
+	 *
+	 * @var Apache_Solr_Response
+	 */
+	private $_response;
+
+	/**
+	 * HttpTransportException Constructor
+	 *
+	 * @param Apache_Solr_Response $response
+	 */
+	public function __construct(Apache_Solr_Response $response)
+	{
+		parent::__construct("'{$response->getHttpStatus()}' Status: {$response->getHttpStatusMessage()}", $response->getHttpStatus());
+
+		$this->_response = $response;
+	}
+
+	/**
+	 * Get the response for which this exception was generated
+	 *
+	 * @return Apache_Solr_Response
+	 */
+	public function getResponse()
+	{
+		return $this->_response;
+	}
+}

+ 50 - 0
SolrPhpClient/Apache/Solr/InvalidArgumentException.php

@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: InvalidArgumentException.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+class Apache_Solr_InvalidArgumentException extends Apache_Solr_Exception
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: InvalidArgumentException.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+}

+ 50 - 0
SolrPhpClient/Apache/Solr/NoServiceAvailableException.php

@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: NoServiceAvailableException.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+class Apache_Solr_NoServiceAvailableException extends Apache_Solr_Exception
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: NoServiceAvailableException.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+}

+ 50 - 0
SolrPhpClient/Apache/Solr/ParserException.php

@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: ParserException.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+class Apache_Solr_ParserException extends Apache_Solr_Exception
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: ParserException.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+}

+ 247 - 0
SolrPhpClient/Apache/Solr/Response.php

@@ -0,0 +1,247 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: Response.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+require_once(dirname(__FILE__) . '/ParserException.php');
+
+/**
+ * Represents a Solr response.  Parses the raw response into a set of stdClass objects
+ * and associative arrays for easy access.
+ *
+ * Currently requires json_decode which is bundled with PHP >= 5.2.0, Alternatively can be
+ * installed with PECL.  Zend Framework also includes a purely PHP solution.
+ */
+class Apache_Solr_Response
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: Response.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+
+	/**
+	 * Holds the raw response used in construction
+	 *
+	 * @var Apache_Solr_HttpTransport_Response HTTP response
+	 */
+	protected $_response;
+
+	/**
+	 * Whether the raw response has been parsed
+	 *
+	 * @var boolean
+	 */
+	protected $_isParsed = false;
+
+	/**
+	 * Parsed representation of the data
+	 *
+	 * @var mixed
+	 */
+	protected $_parsedData;
+
+	/**
+	 * Data parsing flags.  Determines what extra processing should be done
+	 * after the data is initially converted to a data structure.
+	 *
+	 * @var boolean
+	 */
+	protected $_createDocuments = true,
+			$_collapseSingleValueArrays = true;
+
+	/**
+	 * Constructor. Takes the raw HTTP response body and the exploded HTTP headers
+	 *
+	 * @return Apache_Solr_HttpTransport_Response HTTP response
+	 * @param boolean $createDocuments Whether to convert the documents json_decoded as stdClass instances to Apache_Solr_Document instances
+	 * @param boolean $collapseSingleValueArrays Whether to make multivalued fields appear as single values
+	 */
+	public function __construct(Apache_Solr_HttpTransport_Response $response, $createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		$this->_response = $response;
+		$this->_createDocuments = (bool) $createDocuments;
+		$this->_collapseSingleValueArrays = (bool) $collapseSingleValueArrays;
+	}
+
+	/**
+	 * Get the HTTP status code
+	 *
+	 * @return integer
+	 */
+	public function getHttpStatus()
+	{
+		return $this->_response->getStatusCode();
+	}
+
+	/**
+	 * Get the HTTP status message of the response
+	 *
+	 * @return string
+	 */
+	public function getHttpStatusMessage()
+	{
+		return $this->_response->getStatusMessage();
+	}
+
+	/**
+	 * Get content type of this Solr response
+	 *
+	 * @return string
+	 */
+	public function getType()
+	{
+		return $this->_response->getMimeType();
+	}
+
+	/**
+	 * Get character encoding of this response. Should usually be utf-8, but just in case
+	 *
+	 * @return string
+	 */
+	public function getEncoding()
+	{
+		return $this->_response->getEncoding();
+	}
+
+	/**
+	 * Get the raw response as it was given to this object
+	 *
+	 * @return string
+	 */
+	public function getRawResponse()
+	{
+		return $this->_response->getBody();
+	}
+
+	/**
+	 * Magic get to expose the parsed data and to lazily load it
+	 *
+	 * @param string $key
+	 * @return mixed
+	 */
+	public function __get($key)
+	{
+		if (!$this->_isParsed)
+		{
+			$this->_parseData();
+			$this->_isParsed = true;
+		}
+
+		if (isset($this->_parsedData->$key))
+		{
+			return $this->_parsedData->$key;
+		}
+
+		return null;
+	}
+
+	/**
+	 * Magic function for isset function on parsed data
+	 *
+	 * @param string $key
+	 * @return boolean
+	 */
+	public function __isset($key)
+	{
+		if (!$this->_isParsed)
+		{
+			$this->_parseData();
+			$this->_isParsed = true;
+		}
+
+		return isset($this->_parsedData->$key);
+	}
+
+	/**
+	 * Parse the raw response into the parsed_data array for access
+	 *
+	 * @throws Apache_Solr_ParserException If the data could not be parsed
+	 */
+	protected function _parseData()
+	{
+		//An alternative would be to use Zend_Json::decode(...)
+		$data = json_decode($this->_response->getBody());
+
+		// check that we receive a valid JSON response - we should never receive a null
+		if ($data === null)
+		{
+			throw new Apache_Solr_ParserException('Solr response does not appear to be valid JSON, please examine the raw response with getRawResponse() method');
+		}
+
+		//if we're configured to collapse single valued arrays or to convert them to Apache_Solr_Document objects
+		//and we have response documents, then try to collapse the values and / or convert them now
+		if (($this->_createDocuments || $this->_collapseSingleValueArrays) && isset($data->response) && is_array($data->response->docs))
+		{
+			$documents = array();
+
+			foreach ($data->response->docs as $originalDocument)
+			{
+				if ($this->_createDocuments)
+				{
+					$document = new Apache_Solr_Document();
+				}
+				else
+				{
+					$document = $originalDocument;
+				}
+
+				foreach ($originalDocument as $key => $value)
+				{
+					//If a result is an array with only a single
+					//value then its nice to be able to access
+					//it as if it were always a single value
+					if ($this->_collapseSingleValueArrays && is_array($value) && count($value) <= 1)
+					{
+						$value = array_shift($value);
+					}
+
+					$document->$key = $value;
+				}
+
+				$documents[] = $document;
+			}
+
+			$data->response->docs = $documents;
+		}
+
+		$this->_parsedData = $data;
+	}
+}

+ 1181 - 0
SolrPhpClient/Apache/Solr/Service.php

@@ -0,0 +1,1181 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: Service.php 59 2011-02-08 20:38:59Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+// See Issue #1 (http://code.google.com/p/solr-php-client/issues/detail?id=1)
+// Doesn't follow typical include path conventions, but is more convenient for users
+require_once(dirname(__FILE__) . '/Exception.php');
+require_once(dirname(__FILE__) . '/HttpTransportException.php');
+require_once(dirname(__FILE__) . '/InvalidArgumentException.php');
+
+require_once(dirname(__FILE__) . '/Document.php');
+require_once(dirname(__FILE__) . '/Response.php');
+
+require_once(dirname(__FILE__) . '/HttpTransport/Interface.php');
+
+/**
+ * Starting point for the Solr API. Represents a Solr server resource and has
+ * methods for pinging, adding, deleting, committing, optimizing and searching.
+ *
+ * Example Usage:
+ * <code>
+ * ...
+ * $solr = new Apache_Solr_Service(); //or explicitly new Apache_Solr_Service('localhost', 8180, '/solr')
+ *
+ * if ($solr->ping())
+ * {
+ * 		$solr->deleteByQuery('*:*'); //deletes ALL documents - be careful :)
+ *
+ * 		$document = new Apache_Solr_Document();
+ * 		$document->id = uniqid(); //or something else suitably unique
+ *
+ * 		$document->title = 'Some Title';
+ * 		$document->content = 'Some content for this wonderful document. Blah blah blah.';
+ *
+ * 		$solr->addDocument($document); 	//if you're going to be adding documents in bulk using addDocuments
+ * 										//with an array of documents is faster
+ *
+ * 		$solr->commit(); //commit to see the deletes and the document
+ * 		$solr->optimize(); //merges multiple segments into one
+ *
+ * 		//and the one we all care about, search!
+ * 		//any other common or custom parameters to the request handler can go in the
+ * 		//optional 4th array argument.
+ * 		$solr->search('content:blah', 0, 10, array('sort' => 'timestamp desc'));
+ * }
+ * ...
+ * </code>
+ *
+ * @todo Investigate using other HTTP clients other than file_get_contents built-in handler. Could provide performance
+ * improvements when dealing with multiple requests by using HTTP's keep alive functionality
+ */
+class Apache_Solr_Service
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 59 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: Service.php 59 2011-02-08 20:38:59Z donovan.jimenez $';
+
+	/**
+	 * Response writer we'll request - JSON. See http://code.google.com/p/solr-php-client/issues/detail?id=6#c1 for reasoning
+	 */
+	const SOLR_WRITER = 'json';
+
+	/**
+	 * NamedList Treatment constants
+	 */
+	const NAMED_LIST_FLAT = 'flat';
+	const NAMED_LIST_MAP = 'map';
+
+	/**
+	 * Search HTTP Methods
+	 */
+	const METHOD_GET = 'GET';
+	const METHOD_POST = 'POST';
+
+	/**
+	 * Servlet mappings
+	 */
+	const PING_SERVLET = 'admin/ping';
+	const UPDATE_SERVLET = 'update';
+	const SEARCH_SERVLET = 'select';
+	const THREADS_SERVLET = 'admin/threads';
+	const EXTRACT_SERVLET = 'update/extract';
+
+	/**
+	 * Server identification strings
+	 *
+	 * @var string
+	 */
+	protected $_host, $_port, $_path;
+
+	/**
+	 * Whether {@link Apache_Solr_Response} objects should create {@link Apache_Solr_Document}s in
+	 * the returned parsed data
+	 *
+	 * @var boolean
+	 */
+	protected $_createDocuments = true;
+
+	/**
+	 * Whether {@link Apache_Solr_Response} objects should have multivalue fields with only a single value
+	 * collapsed to appear as a single value would.
+	 *
+	 * @var boolean
+	 */
+	protected $_collapseSingleValueArrays = true;
+
+	/**
+	 * How NamedLists should be formatted in the output.  This specifically effects facet counts. Valid values
+	 * are {@link Apache_Solr_Service::NAMED_LIST_MAP} (default) or {@link Apache_Solr_Service::NAMED_LIST_FLAT}.
+	 *
+	 * @var string
+	 */
+	protected $_namedListTreatment = self::NAMED_LIST_MAP;
+
+	/**
+	 * Query delimiters. Someone might want to be able to change
+	 * these (to use &amp; instead of & for example), so I've provided them.
+	 *
+	 * @var string
+	 */
+	protected $_queryDelimiter = '?', $_queryStringDelimiter = '&', $_queryBracketsEscaped = true;
+
+	/**
+	 * Constructed servlet full path URLs
+	 *
+	 * @var string
+	 */
+	protected $_pingUrl, $_updateUrl, $_searchUrl, $_threadsUrl;
+
+	/**
+	 * Keep track of whether our URLs have been constructed
+	 *
+	 * @var boolean
+	 */
+	protected $_urlsInited = false;
+
+	/**
+	 * HTTP Transport implementation (pluggable)
+	 *
+	 * @var Apache_Solr_HttpTransport_Interface
+	 */
+	protected $_httpTransport = false;
+
+	/**
+	 * Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.
+	 *
+	 * NOTE: inside a phrase fewer characters need escaped, use {@link Apache_Solr_Service::escapePhrase()} instead
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function escape($value)
+	{
+		//list taken from http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters
+		$pattern = '/(\+|-|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\\)/';
+		$replace = '\\\$1';
+
+		return preg_replace($pattern, $replace, $value);
+	}
+
+	/**
+	 * Escape a value meant to be contained in a phrase for special query characters
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function escapePhrase($value)
+	{
+		$pattern = '/("|\\\)/';
+		$replace = '\\\$1';
+
+		return preg_replace($pattern, $replace, $value);
+	}
+
+	/**
+	 * Convenience function for creating phrase syntax from a value
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function phrase($value)
+	{
+		return '"' . self::escapePhrase($value) . '"';
+	}
+
+	/**
+	 * Constructor. All parameters are optional and will take on default values
+	 * if not specified.
+	 *
+	 * @param string $host
+	 * @param string $port
+	 * @param string $path
+	 * @param Apache_Solr_HttpTransport_Interface $httpTransport
+	 */
+	public function __construct($host = 'localhost', $port = 8180, $path = '/solr/', $httpTransport = false)
+	{
+		$this->setHost($host);
+		$this->setPort($port);
+		$this->setPath($path);
+
+		$this->_initUrls();
+
+		if ($httpTransport)
+		{
+			$this->setHttpTransport($httpTransport);
+		}
+
+		// check that our php version is >= 5.1.3 so we can correct for http_build_query behavior later
+		$this->_queryBracketsEscaped = version_compare(phpversion(), '5.1.3', '>=');
+	}
+
+	/**
+	 * Return a valid http URL given this server's host, port and path and a provided servlet name
+	 *
+	 * @param string $servlet
+	 * @return string
+	 */
+	protected function _constructUrl($servlet, $params = array())
+	{
+		if (count($params))
+		{
+			//escape all parameters appropriately for inclusion in the query string
+			$escapedParams = array();
+
+			foreach ($params as $key => $value)
+			{
+				$escapedParams[] = urlencode($key) . '=' . urlencode($value);
+			}
+
+			$queryString = $this->_queryDelimiter . implode($this->_queryStringDelimiter, $escapedParams);
+		}
+		else
+		{
+			$queryString = '';
+		}
+
+		return 'http://' . $this->_host . ':' . $this->_port . $this->_path . $servlet . $queryString;
+	}
+
+	/**
+	 * Construct the Full URLs for the three servlets we reference
+	 */
+	protected function _initUrls()
+	{
+		//Initialize our full servlet URLs now that we have server information
+		$this->_extractUrl = $this->_constructUrl(self::EXTRACT_SERVLET);
+		$this->_pingUrl = $this->_constructUrl(self::PING_SERVLET);
+		$this->_searchUrl = $this->_constructUrl(self::SEARCH_SERVLET);
+		$this->_threadsUrl = $this->_constructUrl(self::THREADS_SERVLET, array('wt' => self::SOLR_WRITER ));
+		$this->_updateUrl = $this->_constructUrl(self::UPDATE_SERVLET, array('wt' => self::SOLR_WRITER ));
+
+		$this->_urlsInited = true;
+	}
+
+	protected function _generateQueryString($params)
+	{
+		// use http_build_query to encode our arguments because its faster
+		// than urlencoding all the parts ourselves in a loop
+		//
+		// because http_build_query treats arrays differently than we want to, correct the query
+		// string by changing foo[#]=bar (# being an actual number) parameter strings to just
+		// multiple foo=bar strings. This regex should always work since '=' will be urlencoded
+		// anywhere else the regex isn't expecting it
+		//
+		// NOTE: before php 5.1.3 brackets were not url encoded by http_build query - we've checked
+		// the php version in the constructor and put the results in the instance variable. Also, before
+		// 5.1.2 the arg_separator parameter was not available, so don't use it
+		if ($this->_queryBracketsEscaped)
+		{
+			$queryString = http_build_query($params, null, $this->_queryStringDelimiter);
+			return preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $queryString);
+		}
+		else
+		{
+			$queryString = http_build_query($params);
+			return preg_replace('/\\[(?:[0-9]|[1-9][0-9]+)\\]=/', '=', $queryString);
+		}
+	}
+
+	/**
+	 * Central method for making a get operation against this Solr Server
+	 *
+	 * @param string $url
+	 * @param float $timeout Read timeout in seconds
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If a non 200 response status is returned
+	 */
+	protected function _sendRawGet($url, $timeout = FALSE)
+	{
+		$httpTransport = $this->getHttpTransport();
+
+		$httpResponse = $httpTransport->performGetRequest($url, $timeout);
+		$solrResponse = new Apache_Solr_Response($httpResponse, $this->_createDocuments, $this->_collapseSingleValueArrays);
+
+		if ($solrResponse->getHttpStatus() != 200)
+		{
+			throw new Apache_Solr_HttpTransportException($solrResponse);
+		}
+
+		return $solrResponse;
+	}
+
+	/**
+	 * Central method for making a post operation against this Solr Server
+	 *
+	 * @param string $url
+	 * @param string $rawPost
+	 * @param float $timeout Read timeout in seconds
+	 * @param string $contentType
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If a non 200 response status is returned
+	 */
+	protected function _sendRawPost($url, $rawPost, $timeout = FALSE, $contentType = 'text/xml; charset=UTF-8')
+	{
+		$httpTransport = $this->getHttpTransport();
+
+		$httpResponse = $httpTransport->performPostRequest($url, $rawPost, $contentType, $timeout);
+		$solrResponse = new Apache_Solr_Response($httpResponse, $this->_createDocuments, $this->_collapseSingleValueArrays);
+
+		if ($solrResponse->getHttpStatus() != 200)
+		{
+			throw new Apache_Solr_HttpTransportException($solrResponse);
+		}
+
+		return $solrResponse;
+	}
+
+	/**
+	 * Returns the set host
+	 *
+	 * @return string
+	 */
+	public function getHost()
+	{
+		return $this->_host;
+	}
+
+	/**
+	 * Set the host used. If empty will fallback to constants
+	 *
+	 * @param string $host
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If the host parameter is empty
+	 */
+	public function setHost($host)
+	{
+		//Use the provided host or use the default
+		if (empty($host))
+		{
+			throw new Apache_Solr_InvalidArgumentException('Host parameter is empty');
+		}
+		else
+		{
+			$this->_host = $host;
+		}
+
+		if ($this->_urlsInited)
+		{
+			$this->_initUrls();
+		}
+	}
+
+	/**
+	 * Get the set port
+	 *
+	 * @return integer
+	 */
+	public function getPort()
+	{
+		return $this->_port;
+	}
+
+	/**
+	 * Set the port used. If empty will fallback to constants
+	 *
+	 * @param integer $port
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If the port parameter is empty
+	 */
+	public function setPort($port)
+	{
+		//Use the provided port or use the default
+		$port = (int) $port;
+
+		if ($port <= 0)
+		{
+			throw new Apache_Solr_InvalidArgumentException('Port is not a valid port number');
+		}
+		else
+		{
+			$this->_port = $port;
+		}
+
+		if ($this->_urlsInited)
+		{
+			$this->_initUrls();
+		}
+	}
+
+	/**
+	 * Get the set path.
+	 *
+	 * @return string
+	 */
+	public function getPath()
+	{
+		return $this->_path;
+	}
+
+	/**
+	 * Set the path used. If empty will fallback to constants
+	 *
+	 * @param string $path
+	 */
+	public function setPath($path)
+	{
+		$path = trim($path, '/');
+
+		$this->_path = '/' . $path . '/';
+
+		if ($this->_urlsInited)
+		{
+			$this->_initUrls();
+		}
+	}
+
+	/**
+	 * Get the current configured HTTP Transport
+	 *
+	 * @return HttpTransportInterface
+	 */
+	public function getHttpTransport()
+	{
+		// lazy load a default if one has not be set
+		if ($this->_httpTransport === false)
+		{
+			require_once(dirname(__FILE__) . '/HttpTransport/FileGetContents.php');
+
+			$this->_httpTransport = new Apache_Solr_HttpTransport_FileGetContents();
+		}
+
+		return $this->_httpTransport;
+	}
+
+	/**
+	 * Set the HTTP Transport implemenation that will be used for all HTTP requests
+	 *
+	 * @param Apache_Solr_HttpTransport_Interface
+	 */
+	public function setHttpTransport(Apache_Solr_HttpTransport_Interface $httpTransport)
+	{
+		$this->_httpTransport = $httpTransport;
+	}
+
+	/**
+	 * Set the create documents flag. This determines whether {@link Apache_Solr_Response} objects will
+	 * parse the response and create {@link Apache_Solr_Document} instances in place.
+	 *
+	 * @param boolean $createDocuments
+	 */
+	public function setCreateDocuments($createDocuments)
+	{
+		$this->_createDocuments = (bool) $createDocuments;
+	}
+
+	/**
+	 * Get the current state of teh create documents flag.
+	 *
+	 * @return boolean
+	 */
+	public function getCreateDocuments()
+	{
+		return $this->_createDocuments;
+	}
+
+	/**
+	 * Set the collapse single value arrays flag.
+	 *
+	 * @param boolean $collapseSingleValueArrays
+	 */
+	public function setCollapseSingleValueArrays($collapseSingleValueArrays)
+	{
+		$this->_collapseSingleValueArrays = (bool) $collapseSingleValueArrays;
+	}
+
+	/**
+	 * Get the current state of the collapse single value arrays flag.
+	 *
+	 * @return boolean
+	 */
+	public function getCollapseSingleValueArrays()
+	{
+		return $this->_collapseSingleValueArrays;
+	}
+
+	/**
+	 * Get the current default timeout setting (initially the default_socket_timeout ini setting)
+	 * in seconds
+	 *
+	 * @return float
+	 *
+	 * @deprecated Use the getDefaultTimeout method on the HTTP transport implementation
+	 */
+	public function getDefaultTimeout()
+	{
+		return $this->getHttpTransport()->getDefaultTimeout();
+	}
+
+	/**
+	 * Set the default timeout for all calls that aren't passed a specific timeout
+	 *
+	 * @param float $timeout Timeout value in seconds
+	 *
+	 * @deprecated Use the setDefaultTimeout method on the HTTP transport implementation
+	 */
+	public function setDefaultTimeout($timeout)
+	{
+		$this->getHttpTransport()->setDefaultTimeout($timeout);
+	}
+
+	/**
+	 * Set how NamedLists should be formatted in the response data. This mainly effects
+	 * the facet counts format.
+	 *
+	 * @param string $namedListTreatment
+	 * @throws Apache_Solr_InvalidArgumentException If invalid option is set
+	 */
+	public function setNamedListTreatment($namedListTreatment)
+	{
+		switch ((string) $namedListTreatment)
+		{
+			case Apache_Solr_Service::NAMED_LIST_FLAT:
+				$this->_namedListTreatment = Apache_Solr_Service::NAMED_LIST_FLAT;
+				break;
+
+			case Apache_Solr_Service::NAMED_LIST_MAP:
+				$this->_namedListTreatment = Apache_Solr_Service::NAMED_LIST_MAP;
+				break;
+
+			default:
+				throw new Apache_Solr_InvalidArgumentException('Not a valid named list treatement option');
+		}
+	}
+
+	/**
+	 * Get the current setting for named list treatment.
+	 *
+	 * @return string
+	 */
+	public function getNamedListTreatment()
+	{
+		return $this->_namedListTreatment;
+	}
+
+	/**
+	 * Set the string used to separate the path form the query string.
+	 * Defaulted to '?'
+	 *
+	 * @param string $queryDelimiter
+	 */
+	public function setQueryDelimiter($queryDelimiter)
+	{
+		$this->_queryDelimiter = $queryDelimiter;
+	}
+
+	/**
+	 * Set the string used to separate the parameters in thequery string
+	 * Defaulted to '&'
+	 *
+	 * @param string $queryStringDelimiter
+	 */
+	public function setQueryStringDelimiter($queryStringDelimiter)
+	{
+		$this->_queryStringDelimiter = $queryStringDelimiter;
+	}
+
+	/**
+	 * Call the /admin/ping servlet, can be used to quickly tell if a connection to the
+	 * server is able to be made.
+	 *
+	 * @param float $timeout maximum time to wait for ping in seconds, -1 for unlimited (default is 2)
+	 * @return float Actual time taken to ping the server, FALSE if timeout or HTTP error status occurs
+	 */
+	public function ping($timeout = 2)
+	{
+		$start = microtime(true);
+		
+		$httpTransport = $this->getHttpTransport();
+
+		$httpResponse = $httpTransport->performHeadRequest($this->_pingUrl, $timeout);
+		$solrResponse = new Apache_Solr_Response($httpResponse, $this->_createDocuments, $this->_collapseSingleValueArrays);
+
+		if ($solrResponse->getHttpStatus() == 200)
+		{
+			return microtime(true) - $start;
+		}
+		else
+		{
+			return false;
+		}
+	}
+
+	/**
+	 * Call the /admin/threads servlet and retrieve information about all threads in the
+	 * Solr servlet's thread group. Useful for diagnostics.
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function threads()
+	{
+		return $this->_sendRawGet($this->_threadsUrl);
+	}
+
+	/**
+	 * Raw Add Method. Takes a raw post body and sends it to the update service.  Post body
+	 * should be a complete and well formed "add" xml document.
+	 *
+	 * @param string $rawPost
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function add($rawPost)
+	{
+		return $this->_sendRawPost($this->_updateUrl, $rawPost);
+	}
+
+	/**
+	 * Add a Solr Document to the index
+	 *
+	 * @param Apache_Solr_Document $document
+	 * @param boolean $allowDups
+	 * @param boolean $overwritePending
+	 * @param boolean $overwriteCommitted
+	 * @param integer $commitWithin The number of milliseconds that a document must be committed within, see @{link http://wiki.apache.org/solr/UpdateXmlMessages#The_Update_Schema} for details.  If left empty this property will not be set in the request.
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function addDocument(Apache_Solr_Document $document, $allowDups = false, $overwritePending = true, $overwriteCommitted = true, $commitWithin = 0)
+	{
+		$dupValue = $allowDups ? 'true' : 'false';
+		$pendingValue = $overwritePending ? 'true' : 'false';
+		$committedValue = $overwriteCommitted ? 'true' : 'false';
+		
+		$commitWithin = (int) $commitWithin;
+		$commitWithinString = $commitWithin > 0 ? " commitWithin=\"{$commitWithin}\"" : '';
+		
+		$rawPost = "<add allowDups=\"{$dupValue}\" overwritePending=\"{$pendingValue}\" overwriteCommitted=\"{$committedValue}\"{$commitWithinString}>";
+		$rawPost .= $this->_documentToXmlFragment($document);
+		$rawPost .= '</add>';
+
+		return $this->add($rawPost);
+	}
+
+	/**
+	 * Add an array of Solr Documents to the index all at once
+	 *
+	 * @param array $documents Should be an array of Apache_Solr_Document instances
+	 * @param boolean $allowDups
+	 * @param boolean $overwritePending
+	 * @param boolean $overwriteCommitted
+	 * @param integer $commitWithin The number of milliseconds that a document must be committed within, see @{link http://wiki.apache.org/solr/UpdateXmlMessages#The_Update_Schema} for details.  If left empty this property will not be set in the request.
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function addDocuments($documents, $allowDups = false, $overwritePending = true, $overwriteCommitted = true, $commitWithin = 0)
+	{
+		$dupValue = $allowDups ? 'true' : 'false';
+		$pendingValue = $overwritePending ? 'true' : 'false';
+		$committedValue = $overwriteCommitted ? 'true' : 'false';
+
+		$commitWithin = (int) $commitWithin;
+		$commitWithinString = $commitWithin > 0 ? " commitWithin=\"{$commitWithin}\"" : '';
+
+		$rawPost = "<add allowDups=\"{$dupValue}\" overwritePending=\"{$pendingValue}\" overwriteCommitted=\"{$committedValue}\"{$commitWithinString}>";
+
+		foreach ($documents as $document)
+		{
+			if ($document instanceof Apache_Solr_Document)
+			{
+				$rawPost .= $this->_documentToXmlFragment($document);
+			}
+		}
+
+		$rawPost .= '</add>';
+
+		return $this->add($rawPost);
+	}
+
+	/**
+	 * Create an XML fragment from a {@link Apache_Solr_Document} instance appropriate for use inside a Solr add call
+	 *
+	 * @return string
+	 */
+	protected function _documentToXmlFragment(Apache_Solr_Document $document)
+	{
+		$xml = '<doc';
+
+		if ($document->getBoost() !== false)
+		{
+			$xml .= ' boost="' . $document->getBoost() . '"';
+		}
+
+		$xml .= '>';
+
+		foreach ($document as $key => $value)
+		{
+			$key = htmlspecialchars($key, ENT_QUOTES, 'UTF-8');
+			$fieldBoost = $document->getFieldBoost($key);
+
+			if (is_array($value))
+			{
+				foreach ($value as $multivalue)
+				{
+					$xml .= '<field name="' . $key . '"';
+
+					if ($fieldBoost !== false)
+					{
+						$xml .= ' boost="' . $fieldBoost . '"';
+
+						// only set the boost for the first field in the set
+						$fieldBoost = false;
+					}
+
+					$multivalue = htmlspecialchars($multivalue, ENT_NOQUOTES, 'UTF-8');
+
+					$xml .= '>' . $multivalue . '</field>';
+				}
+			}
+			else
+			{
+				$xml .= '<field name="' . $key . '"';
+
+				if ($fieldBoost !== false)
+				{
+					$xml .= ' boost="' . $fieldBoost . '"';
+				}
+
+				$value = htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8');
+
+				$xml .= '>' . $value . '</field>';
+			}
+		}
+
+		$xml .= '</doc>';
+
+		// replace any control characters to avoid Solr XML parser exception
+		return $this->_stripCtrlChars($xml);
+	}
+
+	/**
+	 * Replace control (non-printable) characters from string that are invalid to Solr's XML parser with a space.
+	 *
+	 * @param string $string
+	 * @return string
+	 */
+	protected function _stripCtrlChars($string)
+	{
+		// See:  http://w3.org/International/questions/qa-forms-utf-8.html
+		// Printable utf-8 does not include any of these chars below x7F
+		return preg_replace('@[\x00-\x08\x0B\x0C\x0E-\x1F]@', ' ', $string);
+	}
+
+	/**
+	 * Send a commit command.  Will be synchronous unless both wait parameters are set to false.
+	 *
+	 * @param boolean $expungeDeletes Defaults to false, merge segments with deletes away
+	 * @param boolean $waitFlush Defaults to true,  block until index changes are flushed to disk
+	 * @param boolean $waitSearcher Defaults to true, block until a new searcher is opened and registered as the main query searcher, making the changes visible
+	 * @param float $timeout Maximum expected duration (in seconds) of the commit operation on the server (otherwise, will throw a communication exception). Defaults to 1 hour
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function commit($expungeDeletes = false, $waitFlush = true, $waitSearcher = true, $timeout = 3600)
+	{
+		$expungeValue = $expungeDeletes ? 'true' : 'false';
+		$flushValue = $waitFlush ? 'true' : 'false';
+		$searcherValue = $waitSearcher ? 'true' : 'false';
+
+		$rawPost = '<commit expungeDeletes="' . $expungeValue . '" waitFlush="' . $flushValue . '" waitSearcher="' . $searcherValue . '" />';
+
+		return $this->_sendRawPost($this->_updateUrl, $rawPost, $timeout);
+	}
+
+	/**
+	 * Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be
+	 * a complete and well formed "delete" xml document
+	 *
+	 * @param string $rawPost Expected to be utf-8 encoded xml document
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function delete($rawPost, $timeout = 3600)
+	{
+		return $this->_sendRawPost($this->_updateUrl, $rawPost, $timeout);
+	}
+
+	/**
+	 * Create a delete document based on document ID
+	 *
+	 * @param string $id Expected to be utf-8 encoded
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteById($id, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$pendingValue = $fromPending ? 'true' : 'false';
+		$committedValue = $fromCommitted ? 'true' : 'false';
+
+		//escape special xml characters
+		$id = htmlspecialchars($id, ENT_NOQUOTES, 'UTF-8');
+
+		$rawPost = '<delete fromPending="' . $pendingValue . '" fromCommitted="' . $committedValue . '"><id>' . $id . '</id></delete>';
+
+		return $this->delete($rawPost, $timeout);
+	}
+
+	/**
+	 * Create and post a delete document based on multiple document IDs.
+	 *
+	 * @param array $ids Expected to be utf-8 encoded strings
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteByMultipleIds($ids, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$pendingValue = $fromPending ? 'true' : 'false';
+		$committedValue = $fromCommitted ? 'true' : 'false';
+
+		$rawPost = '<delete fromPending="' . $pendingValue . '" fromCommitted="' . $committedValue . '">';
+
+		foreach ($ids as $id)
+		{
+			//escape special xml characters
+			$id = htmlspecialchars($id, ENT_NOQUOTES, 'UTF-8');
+
+			$rawPost .= '<id>' . $id . '</id>';
+		}
+
+		$rawPost .= '</delete>';
+
+		return $this->delete($rawPost, $timeout);
+	}
+
+	/**
+	 * Create a delete document based on a query and submit it
+	 *
+	 * @param string $rawQuery Expected to be utf-8 encoded
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteByQuery($rawQuery, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$pendingValue = $fromPending ? 'true' : 'false';
+		$committedValue = $fromCommitted ? 'true' : 'false';
+
+		// escape special xml characters
+		$rawQuery = htmlspecialchars($rawQuery, ENT_NOQUOTES, 'UTF-8');
+
+		$rawPost = '<delete fromPending="' . $pendingValue . '" fromCommitted="' . $committedValue . '"><query>' . $rawQuery . '</query></delete>';
+
+		return $this->delete($rawPost, $timeout);
+	}
+
+	/**
+	 * Use Solr Cell to extract document contents. See {@link http://wiki.apache.org/solr/ExtractingRequestHandler} for information on how
+	 * to use Solr Cell and what parameters are available.
+	 *
+	 * NOTE: when passing an Apache_Solr_Document instance, field names and boosts will automatically be prepended by "literal." and "boost."
+	 * as appropriate. Any keys from the $params array will NOT be treated this way. Any mappings from the document will overwrite key / value
+	 * pairs in the params array if they have the same name (e.g. you pass a "literal.id" key and value in your $params array but you also
+	 * pass in a document isntance with an "id" field" - the document's value(s) will take precedence).
+	 *
+	 * @param string $file Path to file to extract data from
+	 * @param array $params optional array of key value pairs that will be sent with the post (see Solr Cell documentation)
+	 * @param Apache_Solr_Document $document optional document that will be used to generate post parameters (literal.* and boost.* params)
+	 * @param string $mimetype optional mimetype specification (for the file being extracted)
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException if $file, $params, or $document are invalid.
+	 */
+	public function extract($file, $params = array(), $document = null, $mimetype = 'application/octet-stream')
+	{
+		// check if $params is an array (allow null for default empty array)
+		if (!is_null($params))
+		{
+			if (!is_array($params))
+			{
+				throw new Apache_Solr_InvalidArgumentException("\$params must be a valid array or null");
+			}
+		}
+		else
+		{
+			$params = array();
+		}
+		
+		// if $file is an http request, defer to extractFromUrl instead
+		if (substr($file, 0, 7) == 'http://' || substr($file, 0, 8) == 'https://')
+		{
+			return $this->extractFromUrl($file, $params, $document, $mimetype);
+		}
+		
+		// read the contents of the file
+		$contents = @file_get_contents($file);
+
+		if ($contents !== false)
+		{
+			// add the resource.name parameter if not specified
+			if (!isset($params['resource.name']))
+			{
+				$params['resource.name'] = basename($file);
+			}
+
+			// delegate the rest to extractFromString
+			return $this->extractFromString($contents, $params, $document, $mimetype);
+		}
+		else
+		{
+			throw new Apache_Solr_InvalidArgumentException("File '{$file}' is empty or could not be read");
+		}
+	}
+	
+	/**
+	 * Use Solr Cell to extract document contents. See {@link http://wiki.apache.org/solr/ExtractingRequestHandler} for information on how
+	 * to use Solr Cell and what parameters are available.
+	 *
+	 * NOTE: when passing an Apache_Solr_Document instance, field names and boosts will automatically be prepended by "literal." and "boost."
+	 * as appropriate. Any keys from the $params array will NOT be treated this way. Any mappings from the document will overwrite key / value
+	 * pairs in the params array if they have the same name (e.g. you pass a "literal.id" key and value in your $params array but you also
+	 * pass in a document isntance with an "id" field" - the document's value(s) will take precedence).
+	 *
+	 * @param string $data Data that will be passed to Solr Cell
+	 * @param array $params optional array of key value pairs that will be sent with the post (see Solr Cell documentation)
+	 * @param Apache_Solr_Document $document optional document that will be used to generate post parameters (literal.* and boost.* params)
+	 * @param string $mimetype optional mimetype specification (for the file being extracted)
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException if $file, $params, or $document are invalid.
+	 *
+	 * @todo Should be using multipart/form-data to post parameter values, but I could not get my implementation to work. Needs revisisted.
+	 */
+	public function extractFromString($data, $params = array(), $document = null, $mimetype = 'application/octet-stream')
+	{
+		// check if $params is an array (allow null for default empty array)
+		if (!is_null($params))
+		{
+			if (!is_array($params))
+			{
+				throw new Apache_Solr_InvalidArgumentException("\$params must be a valid array or null");
+			}
+		}
+		else
+		{
+			$params = array();
+		}
+
+		// make sure we receive our response in JSON and have proper name list treatment
+		$params['wt'] = self::SOLR_WRITER;
+		$params['json.nl'] = $this->_namedListTreatment;
+
+		// check if $document is an Apache_Solr_Document instance
+		if (!is_null($document) && $document instanceof Apache_Solr_Document)
+		{
+			// iterate document, adding literal.* and boost.* fields to $params as appropriate
+			foreach ($document as $field => $fieldValue)
+			{
+				// check if we need to add a boost.* parameters
+				$fieldBoost = $document->getFieldBoost($field);
+
+				if ($fieldBoost !== false)
+				{
+					$params["boost.{$field}"] = $fieldBoost;
+				}
+
+				// add the literal.* parameter
+				$params["literal.{$field}"] = $fieldValue;
+			}
+		}
+
+		// params will be sent to SOLR in the QUERY STRING
+		$queryString = $this->_generateQueryString($params);
+
+		// the file contents will be sent to SOLR as the POST BODY - we use application/octect-stream as default mimetype
+		return $this->_sendRawPost($this->_extractUrl . $this->_queryDelimiter . $queryString, $data, false, $mimetype);
+	}
+	
+	/**
+	 * Use Solr Cell to extract document contents. See {@link http://wiki.apache.org/solr/ExtractingRequestHandler} for information on how
+	 * to use Solr Cell and what parameters are available.
+	 *
+	 * NOTE: when passing an Apache_Solr_Document instance, field names and boosts will automatically be prepended by "literal." and "boost."
+	 * as appropriate. Any keys from the $params array will NOT be treated this way. Any mappings from the document will overwrite key / value
+	 * pairs in the params array if they have the same name (e.g. you pass a "literal.id" key and value in your $params array but you also
+	 * pass in a document isntance with an "id" field" - the document's value(s) will take precedence).
+	 *
+	 * @param string $url URL
+	 * @param array $params optional array of key value pairs that will be sent with the post (see Solr Cell documentation)
+	 * @param Apache_Solr_Document $document optional document that will be used to generate post parameters (literal.* and boost.* params)
+	 * @param string $mimetype optional mimetype specification (for the file being extracted)
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException if $url, $params, or $document are invalid.
+	 */
+	public function extractFromUrl($url, $params = array(), $document = null, $mimetype = 'application/octet-stream')
+	{
+		// check if $params is an array (allow null for default empty array)
+		if (!is_null($params))
+		{
+			if (!is_array($params))
+			{
+				throw new Apache_Solr_InvalidArgumentException("\$params must be a valid array or null");
+			}
+		}
+		else
+		{
+			$params = array();
+		}
+
+		$httpTransport = $this->getHttpTransport();
+		
+		// read the contents of the URL using our configured Http Transport and default timeout
+		$httpResponse = $httpTransport->performGetRequest($url);
+		
+		// check that its a 200 response
+		if ($httpResponse->getStatusCode() == 200)
+		{
+			// add the resource.name parameter if not specified
+			if (!isset($params['resource.name']))
+			{
+				$params['resource.name'] = $url;
+			}
+
+			// delegate the rest to extractFromString
+			return $this->extractFromString($httpResponse->getBody(), $params, $document, $mimetype);
+		}
+		else
+		{
+			throw new Apache_Solr_InvalidArgumentException("URL '{$url}' returned non 200 response code");
+		}
+	}
+
+	/**
+	 * Send an optimize command.  Will be synchronous unless both wait parameters are set
+	 * to false.
+	 *
+	 * @param boolean $waitFlush
+	 * @param boolean $waitSearcher
+	 * @param float $timeout Maximum expected duration of the commit operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function optimize($waitFlush = true, $waitSearcher = true, $timeout = 3600)
+	{
+		$flushValue = $waitFlush ? 'true' : 'false';
+		$searcherValue = $waitSearcher ? 'true' : 'false';
+
+		$rawPost = '<optimize waitFlush="' . $flushValue . '" waitSearcher="' . $searcherValue . '" />';
+
+		return $this->_sendRawPost($this->_updateUrl, $rawPost, $timeout);
+	}
+
+	/**
+	 * Simple Search interface
+	 *
+	 * @param string $query The raw query string
+	 * @param int $offset The starting offset for result documents
+	 * @param int $limit The maximum number of result documents to return
+	 * @param array $params key / value pairs for other query parameters (see Solr documentation), use arrays for parameter keys used more than once (e.g. facet.field)
+	 * @param string $method The HTTP method (Apache_Solr_Service::METHOD_GET or Apache_Solr_Service::METHOD::POST)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 * @throws Apache_Solr_InvalidArgumentException If an invalid HTTP method is used
+	 */
+	public function search($query, $offset = 0, $limit = 10, $params = array(), $method = self::METHOD_GET)
+	{
+		// ensure params is an array
+		if (!is_null($params))
+		{
+			if (!is_array($params))
+			{
+				// params was specified but was not an array - invalid
+				throw new Apache_Solr_InvalidArgumentException("\$params must be a valid array or null");
+			}
+		}
+		else
+		{
+			$params = array();
+		}
+		
+		// construct our full parameters
+
+		// common parameters in this interface
+		$params['wt'] = self::SOLR_WRITER;
+		$params['json.nl'] = $this->_namedListTreatment;
+
+		$params['q'] = $query;
+		$params['start'] = $offset;
+		$params['rows'] = $limit;
+
+		$queryString = $this->_generateQueryString($params);
+
+		if ($method == self::METHOD_GET)
+		{
+			return $this->_sendRawGet($this->_searchUrl . $this->_queryDelimiter . $queryString);
+		}
+		else if ($method == self::METHOD_POST)
+		{
+			return $this->_sendRawPost($this->_searchUrl, $queryString, FALSE, 'application/x-www-form-urlencoded; charset=UTF-8');
+		}
+		else
+		{
+			throw new Apache_Solr_InvalidArgumentException("Unsupported method '$method', please use the Apache_Solr_Service::METHOD_* constants");
+		}
+	}
+}

+ 914 - 0
SolrPhpClient/Apache/Solr/Service/Balancer.php

@@ -0,0 +1,914 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ * @version $Id: Balancer.php 54 2011-02-04 16:29:18Z donovan.jimenez $
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>, Dan Wolfe
+ */
+
+// See Issue #1 (http://code.google.com/p/solr-php-client/issues/detail?id=1)
+// Doesn't follow typical include path conventions, but is more convenient for users
+require_once(dirname(dirname(__FILE__)) . '/Service.php');
+
+require_once(dirname(dirname(__FILE__)) . '/NoServiceAvailableException.php');
+
+/**
+ * Reference Implementation for using multiple Solr services in a distribution. Functionality
+ * includes:
+ * 	routing of read / write operations
+ * 	failover (on selection) for multiple read servers
+ */
+class Apache_Solr_Service_Balancer
+{
+	/**
+	 * SVN Revision meta data for this class
+	 */
+	const SVN_REVISION = '$Revision: 54 $';
+
+	/**
+	 * SVN ID meta data for this class
+	 */
+	const SVN_ID = '$Id: Balancer.php 54 2011-02-04 16:29:18Z donovan.jimenez $';
+
+	protected $_createDocuments = true;
+
+	protected $_readableServices = array();
+	protected $_writeableServices = array();
+
+	protected $_currentReadService = null;
+	protected $_currentWriteService = null;
+
+	protected $_readPingTimeout = 2;
+	protected $_writePingTimeout = 4;
+
+	// Configuration for server selection backoff intervals
+	protected $_useBackoff = false;		// Set to true to use more resillient write server selection
+	protected $_backoffLimit = 600;		// 10 minute default maximum
+	protected $_backoffEscalation = 2.0; 	// Rate at which to increase backoff period
+	protected $_defaultBackoff = 2.0;		// Default backoff interval
+
+	/**
+	 * Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.
+	 *
+	 * NOTE: inside a phrase fewer characters need escaped, use {@link Apache_Solr_Service::escapePhrase()} instead
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function escape($value)
+	{
+		return Apache_Solr_Service::escape($value);
+	}
+
+	/**
+	 * Escape a value meant to be contained in a phrase for special query characters
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function escapePhrase($value)
+	{
+		return Apache_Solr_Service::escapePhrase($value);
+	}
+
+	/**
+	 * Convenience function for creating phrase syntax from a value
+	 *
+	 * @param string $value
+	 * @return string
+	 */
+	static public function phrase($value)
+	{
+		return Apache_Solr_Service::phrase($value);
+	}
+
+	/**
+	 * Constructor. Takes arrays of read and write service instances or descriptions
+	 *
+	 * @param array $readableServices
+	 * @param array $writeableServices
+	 */
+	public function __construct($readableServices = array(), $writeableServices = array())
+	{
+		//setup readable services
+		foreach ($readableServices as $service)
+		{
+			$this->addReadService($service);
+		}
+
+		//setup writeable services
+		foreach ($writeableServices as $service)
+		{
+			$this->addWriteService($service);
+		}
+	}
+
+	public function setReadPingTimeout($timeout)
+	{
+		$this->_readPingTimeout = $timeout;
+	}
+
+	public function setWritePingTimeout($timeout)
+	{
+		$this->_writePingTimeout = $timeout;
+	}
+
+	public function setUseBackoff($enable)
+	{
+		$this->_useBackoff = $enable;
+	}
+
+	/**
+	 * Generates a service ID
+	 *
+	 * @param string $host
+	 * @param integer $port
+	 * @param string $path
+	 * @return string
+	 */
+	protected function _getServiceId($host, $port, $path)
+	{
+		return $host . ':' . $port . $path;
+	}
+
+	/**
+	 * Adds a service instance or service descriptor (if it is already
+	 * not added)
+	 *
+	 * @param mixed $service
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If service descriptor is not valid
+	 */
+	public function addReadService($service)
+	{
+		if ($service instanceof Apache_Solr_Service)
+		{
+			$id = $this->_getServiceId($service->getHost(), $service->getPort(), $service->getPath());
+
+			$this->_readableServices[$id] = $service;
+		}
+		else if (is_array($service))
+		{
+			if (isset($service['host']) && isset($service['port']) && isset($service['path']))
+			{
+				$id = $this->_getServiceId((string)$service['host'], (int)$service['port'], (string)$service['path']);
+
+				$this->_readableServices[$id] = $service;
+			}
+			else
+			{
+				throw new Apache_Solr_InvalidArgumentException('A Readable Service description array does not have all required elements of host, port, and path');
+			}
+		}
+	}
+
+	/**
+	 * Removes a service instance or descriptor from the available services
+	 *
+	 * @param mixed $service
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If service descriptor is not valid
+	 */
+	public function removeReadService($service)
+	{
+		$id = '';
+
+		if ($service instanceof Apache_Solr_Service)
+		{
+			$id = $this->_getServiceId($service->getHost(), $service->getPort(), $service->getPath());
+		}
+		else if (is_array($service))
+		{
+			if (isset($service['host']) && isset($service['port']) && isset($service['path']))
+			{
+				$id = $this->_getServiceId((string)$service['host'], (int)$service['port'], (string)$service['path']);
+			}
+			else
+			{
+				throw new Apache_Solr_InvalidArgumentException('A Readable Service description array does not have all required elements of host, port, and path');
+			}
+		}
+		else if (is_string($service))
+		{
+			$id = $service;
+		}
+
+		if ($id && isset($this->_readableServices[$id]))
+		{
+			unset($this->_readableServices[$id]);
+		}
+	}
+
+	/**
+	 * Adds a service instance or service descriptor (if it is already
+	 * not added)
+	 *
+	 * @param mixed $service
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If service descriptor is not valid
+	 */
+	public function addWriteService($service)
+	{
+		if ($service instanceof Apache_Solr_Service)
+		{
+			$id = $this->_getServiceId($service->getHost(), $service->getPort(), $service->getPath());
+
+			$this->_writeableServices[$id] = $service;
+		}
+		else if (is_array($service))
+		{
+			if (isset($service['host']) && isset($service['port']) && isset($service['path']))
+			{
+				$id = $this->_getServiceId((string)$service['host'], (int)$service['port'], (string)$service['path']);
+
+				$this->_writeableServices[$id] = $service;
+			}
+			else
+			{
+				throw new Apache_Solr_InvalidArgumentException('A Writeable Service description array does not have all required elements of host, port, and path');
+			}
+		}
+	}
+
+	/**
+	 * Removes a service instance or descriptor from the available services
+	 *
+	 * @param mixed $service
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException If service descriptor is not valid
+	 */
+	public function removeWriteService($service)
+	{
+		$id = '';
+
+		if ($service instanceof Apache_Solr_Service)
+		{
+			$id = $this->_getServiceId($service->getHost(), $service->getPort(), $service->getPath());
+		}
+		else if (is_array($service))
+		{
+			if (isset($service['host']) && isset($service['port']) && isset($service['path']))
+			{
+				$id = $this->_getServiceId((string)$service['host'], (int)$service['port'], (string)$service['path']);
+			}
+			else
+			{
+				throw new Apache_Solr_InvalidArgumentException('A Readable Service description array does not have all required elements of host, port, and path');
+			}
+		}
+		else if (is_string($service))
+		{
+			$id = $service;
+		}
+
+		if ($id && isset($this->_writeableServices[$id]))
+		{
+			unset($this->_writeableServices[$id]);
+		}
+	}
+
+	/**
+	 * Iterate through available read services and select the first with a ping
+	 * that satisfies configured timeout restrictions (or the default)
+	 *
+	 * @return Apache_Solr_Service
+	 *
+	 * @throws Apache_Solr_NoServiceAvailableException If there are no read services that meet requirements
+	 */
+	protected function _selectReadService($forceSelect = false)
+	{
+		if (!$this->_currentReadService || !isset($this->_readableServices[$this->_currentReadService]) || $forceSelect)
+		{
+			if ($this->_currentReadService && isset($this->_readableServices[$this->_currentReadService]) && $forceSelect)
+			{
+				// we probably had a communication error, ping the current read service, remove it if it times out
+				if ($this->_readableServices[$this->_currentReadService]->ping($this->_readPingTimeout) === false)
+				{
+					$this->removeReadService($this->_currentReadService);
+				}
+			}
+
+			if (count($this->_readableServices))
+			{
+				// select one of the read services at random
+				$ids = array_keys($this->_readableServices);
+
+				$id = $ids[rand(0, count($ids) - 1)];
+				$service = $this->_readableServices[$id];
+
+				if (is_array($service))
+				{
+					//convert the array definition to a client object
+					$service = new Apache_Solr_Service($service['host'], $service['port'], $service['path']);
+					$this->_readableServices[$id] = $service;
+				}
+
+				$service->setCreateDocuments($this->_createDocuments);
+				$this->_currentReadService = $id;
+			}
+			else
+			{
+				throw new Apache_Solr_NoServiceAvailableException('No read services were available');
+			}
+		}
+
+		return $this->_readableServices[$this->_currentReadService];
+	}
+
+	/**
+	 * Iterate through available write services and select the first with a ping
+	 * that satisfies configured timeout restrictions (or the default)
+	 *
+	 * @return Apache_Solr_Service
+	 *
+	 * @throws Apache_Solr_NoServiceAvailableException If there are no write services that meet requirements
+	 */
+	protected function _selectWriteService($forceSelect = false)
+	{
+		if($this->_useBackoff)
+		{
+			return $this->_selectWriteServiceSafe($forceSelect);
+		}
+
+		if (!$this->_currentWriteService || !isset($this->_writeableServices[$this->_currentWriteService]) || $forceSelect)
+		{
+			if ($this->_currentWriteService && isset($this->_writeableServices[$this->_currentWriteService]) && $forceSelect)
+			{
+				// we probably had a communication error, ping the current read service, remove it if it times out
+				if ($this->_writeableServices[$this->_currentWriteService]->ping($this->_writePingTimeout) === false)
+				{
+					$this->removeWriteService($this->_currentWriteService);
+				}
+			}
+
+			if (count($this->_writeableServices))
+			{
+				// select one of the read services at random
+				$ids = array_keys($this->_writeableServices);
+
+				$id = $ids[rand(0, count($ids) - 1)];
+				$service = $this->_writeableServices[$id];
+
+				if (is_array($service))
+				{
+					//convert the array definition to a client object
+					$service = new Apache_Solr_Service($service['host'], $service['port'], $service['path']);
+					$this->_writeableServices[$id] = $service;
+				}
+
+				$this->_currentWriteService = $id;
+			}
+			else
+			{
+				throw new Apache_Solr_NoServiceAvailableException('No write services were available');
+			}
+		}
+
+		return $this->_writeableServices[$this->_currentWriteService];
+	}
+
+	/**
+	 * Iterate through available write services and select the first with a ping
+	 * that satisfies configured timeout restrictions (or the default).  The
+	 * timeout period will increase until a connection is made or the limit is
+	 * reached.   This will allow for increased reliability with heavily loaded
+	 * server(s).
+	 *
+	 * @return Apache_Solr_Service
+	 *
+	 * @throws Apache_Solr_NoServiceAvailableException If there are no write services that meet requirements
+	 */
+
+	protected function _selectWriteServiceSafe($forceSelect = false)
+	{
+		if (!$this->_currentWriteService || !isset($this->_writeableServices[$this->_currentWriteService]) || $forceSelect)
+		{
+			if (count($this->_writeableServices))
+			{
+				$backoff = $this->_defaultBackoff;
+
+				do {
+					// select one of the read services at random
+					$ids = array_keys($this->_writeableServices);
+
+					$id = $ids[rand(0, count($ids) - 1)];
+					$service = $this->_writeableServices[$id];
+
+					if (is_array($service))
+					{
+						//convert the array definition to a client object
+						$service = new Apache_Solr_Service($service['host'], $service['port'], $service['path']);
+						$this->_writeableServices[$id] = $service;
+					}
+
+					$this->_currentWriteService = $id;
+
+					$backoff *= $this->_backoffEscalation;
+
+					if($backoff > $this->_backoffLimit)
+					{
+						throw new Apache_Solr_NoServiceAvailableException('No write services were available.  All timeouts exceeded.');
+					}
+
+				} while($this->_writeableServices[$this->_currentWriteService]->ping($backoff) === false);
+			}
+			else
+			{
+				throw new Apache_Solr_NoServiceAvailableException('No write services were available');
+			}
+		}
+
+		return $this->_writeableServices[$this->_currentWriteService];
+	}
+
+	/**
+	 * Set the create documents flag. This determines whether {@link Apache_Solr_Response} objects will
+	 * parse the response and create {@link Apache_Solr_Document} instances in place.
+	 *
+	 * @param boolean $createDocuments
+	 */
+	public function setCreateDocuments($createDocuments)
+	{
+		$this->_createDocuments = (bool) $createDocuments;
+
+		// set on current read service
+		if ($this->_currentReadService)
+		{
+			$service = $this->_selectReadService();
+			$service->setCreateDocuments($createDocuments);
+		}
+	}
+
+	/**
+	 * Get the current state of teh create documents flag.
+	 *
+	 * @return boolean
+	 */
+	public function getCreateDocuments()
+	{
+		return $this->_createDocuments;
+	}
+	
+	/**
+	 * Raw Add Method. Takes a raw post body and sends it to the update service.  Post body
+	 * should be a complete and well formed "add" xml document.
+	 *
+	 * @param string $rawPost
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function add($rawPost)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->add($rawPost);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Add a Solr Document to the index
+	 *
+	 * @param Apache_Solr_Document $document
+	 * @param boolean $allowDups
+	 * @param boolean $overwritePending
+	 * @param boolean $overwriteCommitted
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function addDocument(Apache_Solr_Document $document, $allowDups = false, $overwritePending = true, $overwriteCommitted = true)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->addDocument($document, $allowDups, $overwritePending, $overwriteCommitted);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Add an array of Solr Documents to the index all at once
+	 *
+	 * @param array $documents Should be an array of Apache_Solr_Document instances
+	 * @param boolean $allowDups
+	 * @param boolean $overwritePending
+	 * @param boolean $overwriteCommitted
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function addDocuments($documents, $allowDups = false, $overwritePending = true, $overwriteCommitted = true)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->addDocuments($documents, $allowDups, $overwritePending, $overwriteCommitted);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Send a commit command.  Will be synchronous unless both wait parameters are set
+	 * to false.
+	 *
+	 * @param boolean $waitFlush
+	 * @param boolean $waitSearcher
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function commit($optimize = true, $waitFlush = true, $waitSearcher = true, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->commit($optimize, $waitFlush, $waitSearcher, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be
+	 * a complete and well formed "delete" xml document
+	 *
+	 * @param string $rawPost
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function delete($rawPost, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->delete($rawPost, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Create a delete document based on document ID
+	 *
+	 * @param string $id
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteById($id, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->deleteById($id, $fromPending, $fromCommitted, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Create and post a delete document based on multiple document IDs.
+	 *
+	 * @param array $ids Expected to be utf-8 encoded strings
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteByMultipleIds($ids, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->deleteByMultipleId($ids, $fromPending, $fromCommitted, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Create a delete document based on a query and submit it
+	 *
+	 * @param string $rawQuery
+	 * @param boolean $fromPending
+	 * @param boolean $fromCommitted
+	 * @param float $timeout Maximum expected duration of the delete operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function deleteByQuery($rawQuery, $fromPending = true, $fromCommitted = true, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->deleteByQuery($rawQuery, $fromPending, $fromCommitted, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+	
+	/**
+	 * Use Solr Cell to extract document contents. See {@link http://wiki.apache.org/solr/ExtractingRequestHandler} for information on how
+	 * to use Solr Cell and what parameters are available.
+	 *
+	 * NOTE: when passing an Apache_Solr_Document instance, field names and boosts will automatically be prepended by "literal." and "boost."
+	 * as appropriate. Any keys from the $params array will NOT be treated this way. Any mappings from the document will overwrite key / value
+	 * pairs in the params array if they have the same name (e.g. you pass a "literal.id" key and value in your $params array but you also
+	 * pass in a document isntance with an "id" field" - the document's value(s) will take precedence).
+	 *
+	 * @param string $file Path to file to extract data from
+	 * @param array $params optional array of key value pairs that will be sent with the post (see Solr Cell documentation)
+	 * @param Apache_Solr_Document $document optional document that will be used to generate post parameters (literal.* and boost.* params)
+	 * @param string $mimetype optional mimetype specification (for the file being extracted)
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException if $file, $params, or $document are invalid.
+	 */
+	public function extract($file, $params = array(), $document = null, $mimetype = 'application/octet-stream')
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->extract($file, $params, $document, $mimetype);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+	
+	/**
+	 * Use Solr Cell to extract document contents. See {@link http://wiki.apache.org/solr/ExtractingRequestHandler} for information on how
+	 * to use Solr Cell and what parameters are available.
+	 *
+	 * NOTE: when passing an Apache_Solr_Document instance, field names and boosts will automatically be prepended by "literal." and "boost."
+	 * as appropriate. Any keys from the $params array will NOT be treated this way. Any mappings from the document will overwrite key / value
+	 * pairs in the params array if they have the same name (e.g. you pass a "literal.id" key and value in your $params array but you also
+	 * pass in a document isntance with an "id" field" - the document's value(s) will take precedence).
+	 *
+	 * @param string $data Data that will be passed to Solr Cell
+	 * @param array $params optional array of key value pairs that will be sent with the post (see Solr Cell documentation)
+	 * @param Apache_Solr_Document $document optional document that will be used to generate post parameters (literal.* and boost.* params)
+	 * @param string $mimetype optional mimetype specification (for the file being extracted)
+	 *
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_InvalidArgumentException if $file, $params, or $document are invalid.
+	 *
+	 * @todo Should be using multipart/form-data to post parameter values, but I could not get my implementation to work. Needs revisisted.
+	 */
+	public function extractFromString($data, $params = array(), $document = null, $mimetype = 'application/octet-stream')
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->extractFromString($data, $params, $document, $mimetype);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+	
+	/**
+	 * Send an optimize command.  Will be synchronous unless both wait parameters are set
+	 * to false.
+	 *
+	 * @param boolean $waitFlush
+	 * @param boolean $waitSearcher
+	 * @param float $timeout Maximum expected duration of the optimize operation on the server (otherwise, will throw a communication exception)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function optimize($waitFlush = true, $waitSearcher = true, $timeout = 3600)
+	{
+		$service = $this->_selectWriteService();
+
+		do
+		{
+			try
+			{
+				return $service->optimize($waitFlush, $waitSearcher, $timeout);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectWriteService(true);
+		} while ($service);
+
+		return false;
+	}
+
+	/**
+	 * Simple Search interface
+	 *
+	 * @param string $query The raw query string
+	 * @param int $offset The starting offset for result documents
+	 * @param int $limit The maximum number of result documents to return
+	 * @param array $params key / value pairs for query parameters, use arrays for multivalued parameters
+	 * @param string $method The HTTP method (Apache_Solr_Service::METHOD_GET or Apache_Solr_Service::METHOD::POST)
+	 * @return Apache_Solr_Response
+	 *
+	 * @throws Apache_Solr_HttpTransportException If an error occurs during the service call
+	 */
+	public function search($query, $offset = 0, $limit = 10, $params = array(), $method = Apache_Solr_Service::METHOD_GET)
+	{
+		$service = $this->_selectReadService();
+
+		do
+		{
+			try
+			{
+				return $service->search($query, $offset, $limit, $params, $method);
+			}
+			catch (Apache_Solr_HttpTransportException $e)
+			{
+				if ($e->getCode() != 0) //IF NOT COMMUNICATION ERROR
+				{
+					throw $e;
+				}
+			}
+
+			$service = $this->_selectReadService(true);
+		} while ($service);
+
+		return false;
+	}
+}

+ 26 - 0
SolrPhpClient/COPYING

@@ -0,0 +1,26 @@
+Copyright (c) 2007-2011, Servigistics, Inc. 
+All rights reserved. 
+
+Redistribution and use in source and binary forms, with or without 
+modification, are permitted provided that the following conditions are met: 
+
+ * Redistributions of source code must retain the above copyright notice, 
+   this list of conditions and the following disclaimer. 
+ * Redistributions in binary form must reproduce the above copyright 
+   notice, this list of conditions and the following disclaimer in the 
+   documentation and/or other materials provided with the distribution. 
+ * Neither the name of Servigistics, Inc. nor the names of 
+   its contributors may be used to endorse or promote products derived from 
+   this software without specific prior written permission. 
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGE. 

+ 342 - 0
SolrPhpClient/ChangeLog

@@ -0,0 +1,342 @@
+2011-02-08 20:38  donovan.jimenez
+
+	* Apache/Solr/Service.php, tests/Apache/Solr/ServiceTest.php: See
+	  issue #59 - Adding service extractFromUrl method. This will use
+	  the configured HTTP transport to request the resource. extract
+	  has been modified to detect a file path that starts with http /
+	  https and to defer to extractFromUrl instead. Also, moved
+	  checking for params parameter to the top of method bodies so we
+	  can fail earlier rather than after we've gotten a file / url's
+	  content.
+
+2011-02-08 19:28  donovan.jimenez
+
+	* Apache/Solr/Service.php, tests/Apache/Solr/ServiceTest.php: See
+	  issue #43 - Changing optimize parameter of service's commit
+	  method to its correct name: expungeDeletes. Also harded php unit
+	  tests around commit.
+	  
+	  thanks to Liam O'Boyle and Olivier Ricordeau for patches for this
+	  commit and the previous one for issue #51
+
+2011-02-08 19:11  donovan.jimenez
+
+	* Apache/Solr/Service.php, tests/Apache/Solr/ServiceTest.php: See
+	  issue #51 - adding commitWithin parameter to addDocument and
+	  addDocuments. Also hardened php unit tests for this functions
+
+2011-02-04 16:29  donovan.jimenez
+
+	* Apache/Solr/Document.php, Apache/Solr/Exception.php,
+	  Apache/Solr/HttpTransport/Abstract.php,
+	  Apache/Solr/HttpTransport/Curl.php,
+	  Apache/Solr/HttpTransport/CurlNoReuse.php,
+	  Apache/Solr/HttpTransport/FileGetContents.php,
+	  Apache/Solr/HttpTransport/Interface.php,
+	  Apache/Solr/HttpTransport/Response.php,
+	  Apache/Solr/HttpTransportException.php,
+	  Apache/Solr/InvalidArgumentException.php,
+	  Apache/Solr/NoServiceAvailableException.php,
+	  Apache/Solr/ParserException.php, Apache/Solr/Response.php,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php,
+	  COPYING, tests/Apache/Solr/DocumentTest.php,
+	  tests/Apache/Solr/HttpTransport/AbstractTest.php,
+	  tests/Apache/Solr/HttpTransport/CurlNoReuseTest.php,
+	  tests/Apache/Solr/HttpTransport/CurlTest.php,
+	  tests/Apache/Solr/HttpTransport/FileGetContentsTest.php,
+	  tests/Apache/Solr/HttpTransport/ResponseTest.php,
+	  tests/Apache/Solr/HttpTransportExceptionTest.php,
+	  tests/Apache/Solr/ResponseTest.php,
+	  tests/Apache/Solr/Service/BalancerTest.php,
+	  tests/Apache/Solr/ServiceAbstractTest.php,
+	  tests/Apache/Solr/ServiceTest.php: Updating licence and copyright
+	  texts in sources to reflect transition from Conduit IT to
+	  Servigistics
+
+2010-11-02 20:16  donovan.jimenez
+
+	* Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php,
+	  tests/Apache/Solr/ServiceAbstractTest.php,
+	  tests/Apache/Solr/ServiceTest.php: See issue #55
+	  * Adding an Apache_Solr_Service::extractFromString method
+	  * Adding Apache_Solr_Service_Balancer::extract and
+	  Apache_Solr_Service_Balancer::extractFromString methods
+
+2010-10-21 15:23  donovan.jimenez
+
+	* ., Apache/Solr/HttpTransport,
+	  Apache/Solr/HttpTransport/Abstract.php,
+	  Apache/Solr/HttpTransport/Curl.php,
+	  Apache/Solr/HttpTransport/CurlNoReuse.php,
+	  Apache/Solr/HttpTransport/FileGetContents.php,
+	  Apache/Solr/HttpTransport/Interface.php,
+	  Apache/Solr/HttpTransport/Response.php, Apache/Solr/Response.php,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php,
+	  COPYING, tests/Apache/Solr/DocumentTest.php,
+	  tests/Apache/Solr/HttpTransport,
+	  tests/Apache/Solr/HttpTransport/AbstractTest.php,
+	  tests/Apache/Solr/HttpTransport/CurlNoReuseTest.php,
+	  tests/Apache/Solr/HttpTransport/CurlTest.php,
+	  tests/Apache/Solr/HttpTransport/FileGetContentsTest.php,
+	  tests/Apache/Solr/HttpTransport/ResponseTest.php,
+	  tests/Apache/Solr/HttpTransportExceptionTest.php,
+	  tests/Apache/Solr/ResponseTest.php,
+	  tests/Apache/Solr/Service/BalancerTest.php,
+	  tests/Apache/Solr/Service/TestAll.php,
+	  tests/Apache/Solr/ServiceAbstractTest.php,
+	  tests/Apache/Solr/ServiceTest.php, tests/Apache/Solr/TestAll.php,
+	  tests/phpunit.bootstrap.inc, tests/phpunit.xml, tests/run.php:
+	  Merging the http_requests branch into trunk
+	  
+	  See issue #49 - Service can now have the way it makes HTTP
+	  requests plugged in.
+	  The only requirement is that the plugin implement the new
+	  Apache_Solr_HttpTransport_Interface. There are initial
+	  implementations for using
+	  file_get_contents (what was used previously) and for using the
+	  curl module. Much
+	  thanks to Timo Schmidt for submitting an initial patch.
+	  
+	  If the user does not specifically provide a transport interface
+	  instance, the
+	  file get contents implementation will be used by default.
+	  
+	  There is a compatibility breaking change on the
+	  Apache_Solr_Response
+	  constructor. The Signature has changed.
+	  
+	  The getDefaultTimeout and setDefaultTimeout methods on the
+	  Apache_Solr_Service
+	  class are now deprecated. They simple pass through to the active
+	  transport's
+	  methods of the same name, and I'd rather the user manage it
+	  there.
+	  
+	  Additionally, I have cleaned up and expanded the existing unit
+	  tests - had to
+	  change tests related to the breaking change, and added new ones
+	  for the new
+	  classes as well as expanding existing ones. They should now all
+	  pass. curl tests
+	  should only run if the curl module is enabled. file get contents
+	  tests should
+	  only run if allow_url_fopen is enabled. transport tests do rely
+	  on an internet
+	  connection at this time.
+
+2010-09-07 14:44  donovan.jimenez
+
+	* Apache/Solr/Document.php: See issue #48, doing an isset check as
+	  part of the magic get. Return null if not.
+
+2010-09-07 14:34  donovan.jimenez
+
+	* Apache/Solr/Service.php: See issue #47, adding missing argument
+	  to getFieldBoost call in Apache_Solr_Service::extract method
+
+2010-07-08 22:35  donovan.jimenez
+
+	* Apache/Solr/Service.php: See issue #37 - adding a getter /
+	  setting for the default timeout value. Still initially populated
+	  with the default_socket_timeout ini setting
+
+2010-07-08 22:21  donovan.jimenez
+
+	* Apache/Solr/Service.php: See issue #42 - Adding missing require
+	  once for ParserException
+
+2010-04-24 00:44  donovan.jimenez
+
+	* Apache/Solr/HttpTransportException.php, Apache/Solr/Service.php:
+	  See issue #38 - Adding support for Solr Cell (tika) extraction
+	  handler. Thanks to Liam O'Boyle for original patch.
+
+2010-03-22 23:10  donovan.jimenez
+
+	* Apache/Solr/Service.php: See Issue #39 - send charset for POST
+	  form encoded data so that the servlet container for solr will
+	  interpret data correctly (will usually default to latin1)
+
+2010-03-22 23:06  donovan.jimenez
+
+	* Apache/Solr/Service.php: Resolving Issue #40 - when using php
+	  with all error output or using a code analyzer, the
+	  http_response_header variable looks as though it won't be
+	  initialized before being used. Initializing it to null to
+	  alleviate the emitted warning.
+
+2010-03-10 00:28  donovan.jimenez
+
+	* tests, tests/Apache, tests/Apache/Solr,
+	  tests/Apache/Solr/DocumentTest.php,
+	  tests/Apache/Solr/ResponseTest.php, tests/Apache/Solr/Service,
+	  tests/Apache/Solr/Service/BalancerTest.php,
+	  tests/Apache/Solr/Service/TestAll.php,
+	  tests/Apache/Solr/ServiceTest.php, tests/Apache/Solr/TestAll.php,
+	  tests/README, tests/phpunit.bootstrap.inc, tests/phpunit.xml,
+	  tests/run.php: Adding some very dusty unit tests. They are not
+	  complete, and some recent API changes may not be reflected in
+	  them, but they are a start.
+
+2010-02-20 00:01  donovan.jimenez
+
+	* Apache/Solr/Service/Balancer.php: See Issue #34 - synchronizing
+	  Apache_Solr_Service_Balancer public methods with changes in
+	  Apache_Solr_Service. Specifically, adding some missing optional
+	  timeout parameters and adding the new deleteByMultipleIds method
+
+2010-02-19 23:47  donovan.jimenez
+
+	* Apache/Solr/Response.php: See Issue #35 - implementing __isset
+	  magic method on Apache_Solr_Response
+
+2010-02-19 23:36  donovan.jimenez
+
+	* Apache/Solr/Document.php, Apache/Solr/Exception.php,
+	  Apache/Solr/HttpTransportException.php,
+	  Apache/Solr/InvalidArgumentException.php,
+	  Apache/Solr/NoServiceAvailableException.php,
+	  Apache/Solr/ParserException.php, Apache/Solr/Response.php,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php: See
+	  Issue #36 - fix usage of generic exceptions, thanks to dennis
+	  vierkant for the patch.
+
+2009-12-10 03:51  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes issue #28 - Fixes typo in
+	  setNamedListTreatment function name. Thanks to alex dunae
+
+2009-12-10 03:49  donovan.jimenez
+
+	* Apache/Solr/Response.php: Fixes issue #27 - when parsing the JSON
+	  data, add a check for null so we can throw an exception if the
+	  response seems to be invalid. Thanks to thomas rabaix for the
+	  suggestion.
+
+2009-11-21 02:07  donovan.jimenez
+
+	* Apache/Solr/Service.php: see issue #23 - removing unused (by Sorl
+	  JSON writer) and incorrect (version did not track with Solr
+	  version) version parameter from all requests
+
+2009-11-21 02:02  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes #26 - Do a php version check
+	  against 5.1.3 to determine whether brackets will be url encoded
+	  by http_build_query function. Depending on the result of the
+	  version check use the proper regex for fixing up the query string
+	  before passing it to Solr
+
+2009-11-09 22:46  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes #20 - in previous fix, used
+	  stream_context_set_params when I should have used
+	  stream_context_set_option
+
+2009-11-09 22:08  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes #20 - Reusing a get and post
+	  context for each request instead of creating a new stream context
+	  for each. PHP does not provide a function to delete created
+	  stream contexts and does not appear to clean them up when they go
+	  out of scope, which leads to high memory usage when many solr
+	  requests were issued (typically in indexing usage)
+
+2009-11-09 21:32  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes #21 - Adding method to delete by
+	  multiple IDs. Thanks to pwolanin
+
+2009-08-12 14:08  donovan.jimenez
+
+	* Apache/Solr/Response.php: The split function is deprecated as of
+	  PHP 5.3. Furthermore, since none of my split's were using a regex
+	  it is better to use explode anyway. Fixes #19
+
+2009-08-04 18:23  donovan.jimenez
+
+	* Apache/Solr/Response.php, Apache/Solr/Service.php: Removed todo's
+	  about investigating Serialized PHP and PHP output writer usage.
+	  I've made the decision to stick to usage of JSON output writer
+	  until it can be proven that the other output writers are more
+	  stable or provide a substantially faster implementation. Closes
+	  issue #6
+
+2009-08-04 17:53  donovan.jimenez
+
+	* Apache/Solr/Document.php, Apache/Solr/Response.php,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php: Adding
+	  useful SVN metadata constants to each Apache_Solr class by svn
+	  keyword substitution. Fixes issue #16
+
+2009-08-04 17:14  donovan.jimenez
+
+	* Apache/Solr/Service.php: Fixes issue #5 - Applying patch (with
+	  minor changes) from mkalkbrenner to replace all control
+	  characters in Apache_Solr_Document keys / values with spaces to
+	  avoid an exception from Solr's XML Parser.
+
+2009-07-20 14:14  donovan.jimenez
+
+	* Apache/Solr/Service.php: See issue #14
+	  * adding timeout parameters to all delete functions
+
+2009-05-11 14:51  donovan.jimenez
+
+	* Apache/Solr/Service.php: See issue #8
+	  * Adding the ability to specify the HTTP method used for sending
+	  a search query (GET or POST)
+
+2009-03-12 03:46  donovan.jimenez
+
+	* Apache/Solr/Service.php: See
+	  http://code.google.com/p/solr-php-client/issues/detail?id=4
+	  * Reworking Service::ping() to just use file_get_contents URL
+	  wrappers like we do for other GET's and POST operations
+	  * Reworked Service::_sendRawGet() and Service::_sendRawPost() to
+	  create a new stream context each time. Used for controlled
+	  request timeouts, headers, and POST information
+
+2009-01-29 00:49  donovan.jimenez
+
+	* Apache/Solr/Document.php: See
+	  http://code.google.com/p/solr-php-client/issues/detail?id=2
+	  
+	  Attempting to fix null vs. false boost parameter value issue by
+	  always casting to float value first.
+	  
+	  Needs tested.
+
+2009-01-28 17:11  donovan.jimenez
+
+	* Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php: See
+	  http://code.google.com/p/solr-php-client/issues/detail?id=1
+	  
+	  Changed require_once statements that expected the Solr Client
+	  library to be on the include path into statements that use the
+	  __FILE__ magic constant to do them as absolute paths. This should
+	  get rid of the requirement for the user to change their include
+	  path configuration or add the library to the include path at
+	  runtime.
+	  
+	  Provided as a convenience for the user.
+	  
+
+2009-01-22 04:01  donovan.jimenez
+
+	* Apache/Solr/Document.php, Apache/Solr/Response.php,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php,
+	  COPYING: Updating license to New BSD for google code hosting.
+	  Also updating copyright message
+
+2009-01-21 23:50  donovan.jimenez
+
+	* Apache, Apache/Solr, Apache/Solr/Document.php,
+	  Apache/Solr/Response.php, Apache/Solr/Service,
+	  Apache/Solr/Service.php, Apache/Solr/Service/Balancer.php:
+	  Importing Solr PHP client from last released zip file
+
+2008-11-26 00:26  
+
+	* .: Initial directory structure.
+

File diff suppressed because it is too large
+ 32 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Document.html


File diff suppressed because it is too large
+ 33 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Exception.html


File diff suppressed because it is too large
+ 31 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransportException.html


+ 196 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Abstract.html

@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_Abstract</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_HttpTransport_Abstract</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-descendents">Descendents</a>
+			|													<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+					</div>
+	<div class="info-box-body">
+                <p class="implements">
+            Implements interfaces:
+            <ul>
+                <li><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Interface.html">Apache_Solr_HttpTransport_Interface</a></li>            </ul>
+        </p>
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Convenience class that implements the transport implementation. Can be extended by</p>
+<p class="description"><p>real implementations to do some of the common book keeping</p></p>
+	<ul class="tags">
+				<li><span class="field">abstract:</span> </li>
+			</ul>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---Abstract.php.html">/HttpTransport/Abstract.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportAbstract.php.html#a43">43</a></span>)
+		</p>
+		
+				
+		<pre></pre>
+	
+			</div>
+</div>
+
+	<a name="sec-descendents"></a>
+	<div class="info-box">
+		<div class="info-box-title">Direct descendents</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Descendents</span>
+			|															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+								</div>
+		<div class="info-box-body">
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html">Apache_Solr_HttpTransport_FileGetContents</a></td>
+					<td>
+											HTTP Transport implemenation that uses the builtin http URL wrappers and file_get_contents
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Curl.html">Apache_Solr_HttpTransport_Curl</a></td>
+					<td>
+											A Curl based HTTP transport. Uses a single curl session for all requests.
+										</td>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html">Apache_Solr_HttpTransport_CurlNoReuse</a></td>
+					<td>
+											An alternative Curl HTTP transport that opens and closes a curl session for  every request. This isn't the recommended way to use curl, but some version of  PHP have memory issues.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+							<a href="#sec-descendents">Descendents</a> |
+												<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																														
+				<div class="method-definition">
+											<span class="method-result">float</span>
+										<a href="#getDefaultTimeout" title="details" class="method-name">getDefaultTimeout</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setDefaultTimeout" title="details" class="method-name">setDefaultTimeout</a>
+											(<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span>)
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+							<a href="#sec-descendents">Descendents</a> |
+																<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodgetDefaultTimeout" id="getDefaultTimeout"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getDefaultTimeout</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportAbstract.php.html#a58">58</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the current default timeout setting (initially the default_socket_timeout ini setting)  in seconds</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">float</span>
+		<span class="method-name">
+			getDefaultTimeout
+		</span>
+				()
+			</div>
+	
+		
+				<hr class="separator" />
+		<div class="notes">Implementation of:</div>
+			<dl>
+			<dt><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Interface::getDefaultTimeout()</a></dt>
+						<dd>Get the current default timeout for all HTTP requests</dd>
+					</dl>
+			
+	</div>
+<a name="methodsetDefaultTimeout" id="setDefaultTimeout"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setDefaultTimeout</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportAbstract.php.html#a80">80</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Set the current default timeout for all HTTP requests</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setDefaultTimeout
+		</span>
+					(<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">float</span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+				<hr class="separator" />
+		<div class="notes">Implementation of:</div>
+			<dl>
+			<dt><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Interface::setDefaultTimeout()</a></dt>
+						<dd>Set the current default timeout for all HTTP requests</dd>
+					</dl>
+			
+	</div>
+						
+		</div>
+	</div>
+
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:08 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 336 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Curl.html

@@ -0,0 +1,336 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_Curl</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_HttpTransport_Curl</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+											<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">A Curl based HTTP transport. Uses a single curl session for all requests.</p>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---Curl.php.html">/HttpTransport/Curl.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a45">45</a></span>)
+		</p>
+		
+				
+		<pre><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a>
+   |
+   --Apache_Solr_HttpTransport_Curl</pre>
+	
+			</div>
+</div>
+
+
+	<a name="sec-const-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constant Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+						<span class="disabled">Constants</span> (<a href="#sec-consts">details</a>)
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<div class="const-summary">
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_ID" title="details" class="const-name">SVN_ID</a> = 					<span class="var-type"> '$Id:$'</span>
+
+				</div>
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_REVISION" title="details" class="const-name">SVN_REVISION</a> = 					<span class="var-type"> '$Revision:$'</span>
+
+				</div>
+							</div>
+		</div>
+	</div>
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+															<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																																																						
+				<div class="method-definition">
+											<span class="method-result">Apache_Solr_HttpTransport_Curl</span>
+										<a href="#__construct" title="details" class="method-name">__construct</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#__destruct" title="details" class="method-name">__destruct</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performGetRequest" title="details" class="method-name">performGetRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performHeadRequest" title="details" class="method-name">performHeadRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performPostRequest" title="details" class="method-name">performPostRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$postData</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+																		<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+										<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="method__construct" id="__construct"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor __construct</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a67">67</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Initializes a curl session</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">Apache_Solr_HttpTransport_Curl</span>
+		<span class="method-name">
+			__construct
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="method__destruct" id="__destruct"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">Destructor __destruct</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a88">88</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Closes a curl session</p>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			__destruct
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodperformGetRequest" id="performGetRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performGetRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a94">94</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performGetRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformHeadRequest" id="performHeadRequest"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">performHeadRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a128">128</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performHeadRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformPostRequest" id="performPostRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performPostRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a159">159</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performPostRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$postData</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$postData</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$contentType</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+							<h4>Inherited Methods</h4>
+				<a name='inherited_methods'><!-- --></a>	
+									<!-- =========== Summary =========== -->
+					<p>Inherited From <span class="classname"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a></span></p>
+					<blockquote>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::getDefaultTimeout()</a></span><br>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::setDefaultTimeout()</a></span><br>
+											</blockquote>
+										
+		</div>
+	</div>
+
+	<a name="sec-consts"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constants</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+										<a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>)
+						
+			
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<a name="constSVN_ID" id="SVN_ID"><!-- --></A>
+<div class="oddrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_ID</span>
+			 = <span class="const-default"> '$Id:$'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a55">55</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN ID meta data for this class</p>
+	
+	
+</div>
+<a name="constSVN_REVISION" id="SVN_REVISION"><!-- --></A>
+<div class="evenrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_REVISION</span>
+			 = <span class="const-default"> '$Revision:$'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html#a50">50</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN Revision meta data for this class</p>
+	
+	
+</div>
+						
+		</div>
+	</div>
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:12 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 279 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html

@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_CurlNoReuse</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_HttpTransport_CurlNoReuse</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+											<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">An alternative Curl HTTP transport that opens and closes a curl session for  every request. This isn't the recommended way to use curl, but some version of  PHP have memory issues.</p>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---CurlNoReuse.php.html">/HttpTransport/CurlNoReuse.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a47">47</a></span>)
+		</p>
+		
+				
+		<pre><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a>
+   |
+   --Apache_Solr_HttpTransport_CurlNoReuse</pre>
+	
+			</div>
+</div>
+
+
+	<a name="sec-const-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constant Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+						<span class="disabled">Constants</span> (<a href="#sec-consts">details</a>)
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<div class="const-summary">
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_ID" title="details" class="const-name">SVN_ID</a> = 					<span class="var-type"> '$Id:$'</span>
+
+				</div>
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_REVISION" title="details" class="const-name">SVN_REVISION</a> = 					<span class="var-type"> '$Revision:$'</span>
+
+				</div>
+							</div>
+		</div>
+	</div>
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+															<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																																						
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performGetRequest" title="details" class="method-name">performGetRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performHeadRequest" title="details" class="method-name">performHeadRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performPostRequest" title="details" class="method-name">performPostRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$postData</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+																		<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+										<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodperformGetRequest" id="performGetRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performGetRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a59">59</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performGetRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformHeadRequest" id="performHeadRequest"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">performHeadRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a101">101</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performHeadRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformPostRequest" id="performPostRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performPostRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a146">146</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performPostRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$postData</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$postData</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$contentType</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+							<h4>Inherited Methods</h4>
+				<a name='inherited_methods'><!-- --></a>	
+									<!-- =========== Summary =========== -->
+					<p>Inherited From <span class="classname"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a></span></p>
+					<blockquote>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::getDefaultTimeout()</a></span><br>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::setDefaultTimeout()</a></span><br>
+											</blockquote>
+										
+		</div>
+	</div>
+
+	<a name="sec-consts"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constants</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+										<a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>)
+						
+			
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<a name="constSVN_ID" id="SVN_ID"><!-- --></A>
+<div class="oddrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_ID</span>
+			 = <span class="const-default"> '$Id:$'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a57">57</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN ID meta data for this class</p>
+	
+	
+</div>
+<a name="constSVN_REVISION" id="SVN_REVISION"><!-- --></A>
+<div class="evenrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_REVISION</span>
+			 = <span class="const-default"> '$Revision:$'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html#a52">52</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN Revision meta data for this class</p>
+	
+	
+</div>
+						
+		</div>
+	</div>
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:13 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 309 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html

@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_FileGetContents</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_HttpTransport_FileGetContents</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+											<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">HTTP Transport implemenation that uses the builtin http URL wrappers and file_get_contents</p>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---FileGetContents.php.html">/HttpTransport/FileGetContents.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a45">45</a></span>)
+		</p>
+		
+				
+		<pre><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a>
+   |
+   --Apache_Solr_HttpTransport_FileGetContents</pre>
+	
+			</div>
+</div>
+
+
+	<a name="sec-const-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constant Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+						<span class="disabled">Constants</span> (<a href="#sec-consts">details</a>)
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<div class="const-summary">
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_ID" title="details" class="const-name">SVN_ID</a> = 					<span class="var-type"> '$Id:  $'</span>
+
+				</div>
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_REVISION" title="details" class="const-name">SVN_REVISION</a> = 					<span class="var-type"> '$Revision:  $'</span>
+
+				</div>
+							</div>
+		</div>
+	</div>
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+															<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+									<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																																														
+				<div class="method-definition">
+											<span class="method-result">Apache_Solr_HttpTransport_FileGetContents</span>
+										<a href="#__construct" title="details" class="method-name">__construct</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performGetRequest" title="details" class="method-name">performGetRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performHeadRequest" title="details" class="method-name">performHeadRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#performPostRequest" title="details" class="method-name">performPostRequest</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$rawPost</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+																		<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+										<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="method__construct" id="__construct"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor __construct</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a67">67</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Initializes our reuseable get and post stream contexts</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">Apache_Solr_HttpTransport_FileGetContents</span>
+		<span class="method-name">
+			__construct
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodperformGetRequest" id="performGetRequest"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">performGetRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a74">74</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performGetRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformHeadRequest" id="performHeadRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performHeadRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a100">100</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performHeadRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformPostRequest" id="performPostRequest"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">performPostRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a132">132</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			performPostRequest
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$url</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$rawPost</span>, <span class="var-type"></span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type"></span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$rawPost</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$contentType</span>			</li>
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+							<h4>Inherited Methods</h4>
+				<a name='inherited_methods'><!-- --></a>	
+									<!-- =========== Summary =========== -->
+					<p>Inherited From <span class="classname"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a></span></p>
+					<blockquote>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::getDefaultTimeout()</a></span><br>
+													<span class="method-name"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::setDefaultTimeout()</a></span><br>
+											</blockquote>
+										
+		</div>
+	</div>
+
+	<a name="sec-consts"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constants</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+										<a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>)
+						
+			
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<a name="constSVN_ID" id="SVN_ID"><!-- --></A>
+<div class="evenrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_ID</span>
+			 = <span class="const-default"> '$Id:  $'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a55">55</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN ID meta data for this class</p>
+	
+	
+</div>
+<a name="constSVN_REVISION" id="SVN_REVISION"><!-- --></A>
+<div class="oddrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_REVISION</span>
+			 = <span class="const-default"> '$Revision:  $'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html#a50">50</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN Revision meta data for this class</p>
+	
+	
+</div>
+						
+		</div>
+	</div>
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:14 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 260 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Interface.html

@@ -0,0 +1,260 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_Interface</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Interface Apache_Solr_HttpTransport_Interface</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+					</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Interface that all Transport (HTTP Requester) implementations must implement. These</p>
+<p class="description"><p>Implementations can then be plugged into the Service instance in order to user their  the desired method for making HTTP requests</p></p>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---Interface.php.html">/HttpTransport/Interface.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a47">47</a></span>)
+		</p>
+		
+				
+		<pre></pre>
+	
+			</div>
+</div>
+
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+												<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																																																						
+				<div class="method-definition">
+											<span class="method-result">float</span>
+										<a href="#getDefaultTimeout" title="details" class="method-name">getDefaultTimeout</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+										<a href="#performGetRequest" title="details" class="method-name">performGetRequest</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+										<a href="#performHeadRequest" title="details" class="method-name">performHeadRequest</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+										<a href="#performPostRequest" title="details" class="method-name">performPostRequest</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$rawPost</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#setDefaultTimeout" title="details" class="method-name">setDefaultTimeout</a>
+											(<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span>)
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+																<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodgetDefaultTimeout" id="getDefaultTimeout"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getDefaultTimeout</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a54">54</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the current default timeout for all HTTP requests</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">float</span>
+		<span class="method-name">
+			getDefaultTimeout
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodperformGetRequest" id="performGetRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performGetRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a71">71</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Perform a GET HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> HTTP response</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+		<span class="method-name">
+			performGetRequest
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type">float</span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformHeadRequest" id="performHeadRequest"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">performHeadRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a81">81</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Perform a HEAD HTTP operation with an optional timeout and return the response  headers - NOTE: head requests have no response body</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> HTTP response</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+		<span class="method-name">
+			performHeadRequest
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type">float</span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodperformPostRequest" id="performPostRequest"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">performPostRequest</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a93">93</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Perform a POST HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> HTTP response</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+		<span class="method-name">
+			performPostRequest
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$url</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$rawPost</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$contentType</span>, [<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span> = <span class="var-default">false</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$url</span>			</li>
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$rawPost</span>			</li>
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$contentType</span>			</li>
+					<li>
+				<span class="var-type">float</span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodsetDefaultTimeout" id="setDefaultTimeout"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">setDefaultTimeout</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html#a61">61</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Set the current default timeout for all HTTP requests</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			setDefaultTimeout
+		</span>
+					(<span class="var-type">float</span>&nbsp;<span class="var-name">$timeout</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">float</span>
+				<span class="var-name">$timeout</span>			</li>
+				</ul>
+		
+			
+	</div>
+						
+		</div>
+	</div>
+
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 298 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_HttpTransport_Response.html

@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_HttpTransport_Response</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_HttpTransport_Response</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+															<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+					</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Represents the required pieces of an HTTP response provided by HTTP transport</p>
+<p class="description"><p>implementations and then consumed by the Apache_Solr_Response class which provides  decoding</p></p>
+		<p class="notes">
+			Located in <a class="field" href="_HttpTransport---Response.php.html">/HttpTransport/Response.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a44">44</a></span>)
+		</p>
+		
+				
+		<pre></pre>
+	
+			</div>
+</div>
+
+
+
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+												<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																										
+				<div class="method-definition">
+					static 						<span class="method-result">string</span>
+										<a href="#getDefaultStatusMessage" title="details" class="method-name">getDefaultStatusMessage</a>
+											(<span class="var-type"></span>&nbsp;<span class="var-name">$statusCode</span>)
+									</div>
+																																																		
+				<div class="method-definition">
+											<span class="method-result">Apache_Solr_HttpTransport_Response</span>
+										<a href="#__construct" title="details" class="method-name">__construct</a>
+											(<span class="var-type">integer</span>&nbsp;<span class="var-name">$statusCode</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$contentType</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$responseBody</span>)
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getBody" title="details" class="method-name">getBody</a>
+										()
+									</div>
+																						
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getEncoding" title="details" class="method-name">getEncoding</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getMimeType" title="details" class="method-name">getMimeType</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">integer</span>
+										<a href="#getStatusCode" title="details" class="method-name">getStatusCode</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getStatusMessage" title="details" class="method-name">getStatusMessage</a>
+										()
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+																<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="methodgetDefaultStatusMessage" id="getDefaultStatusMessage"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">static getDefaultStatusMessage</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a112">112</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the HTTP status message based on status code</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		static <span class="method-result">string</span>
+		<span class="method-name">
+			getDefaultStatusMessage
+		</span>
+					(<span class="var-type"></span>&nbsp;<span class="var-name">$statusCode</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type"></span>
+				<span class="var-name">$statusCode</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="method__construct" id="__construct"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor __construct</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a166">166</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Construct a HTTP transport response</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">Apache_Solr_HttpTransport_Response</span>
+		<span class="method-name">
+			__construct
+		</span>
+					(<span class="var-type">integer</span>&nbsp;<span class="var-name">$statusCode</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$contentType</span>, <span class="var-type">string</span>&nbsp;<span class="var-name">$responseBody</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">integer</span>
+				<span class="var-name">$statusCode</span><span class="var-description">: The HTTP status code</span>			</li>
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$contentType</span><span class="var-description">: The VALUE of the Content-Type HTTP header</span>			</li>
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$responseBody</span><span class="var-description">: The body of the HTTP response</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodgetBody" id="getBody"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getBody</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a251">251</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the raw response body</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getBody
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetEncoding" id="getEncoding"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getEncoding</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a241">241</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the charset encoding of the response body.</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getEncoding
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetMimeType" id="getMimeType"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getMimeType</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a231">231</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the mimetype of the response body</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getMimeType
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetStatusCode" id="getStatusCode"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getStatusCode</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a211">211</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the status code of the response</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">integer</span>
+		<span class="method-name">
+			getStatusCode
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetStatusMessage" id="getStatusMessage"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getStatusMessage</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html#a221">221</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the status message of the response</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getStatusMessage
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+						
+		</div>
+	</div>
+
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:16 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_InvalidArgumentException.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_NoServiceAvailableException.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_ParserException.html


+ 621 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Response.html

@@ -0,0 +1,621 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs For Class Apache_Solr_Response</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="class-name">Class Apache_Solr_Response</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+													<a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>)
+						|											<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+						
+											<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+						
+			</div>
+	<div class="info-box-body">
+        		<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Represents a Solr response.  Parses the raw response into a set of stdClass objects  and associative arrays for easy access.</p>
+<p class="description"><p>Currently requires json_decode which is bundled with PHP &gt;= 5.2.0, Alternatively can be  installed with PECL.  Zend Framework also includes a purely PHP solution.</p></p>
+		<p class="notes">
+			Located in <a class="field" href="_Response.php.html">/Response.php</a> (line <span class="field"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a48">48</a></span>)
+		</p>
+		
+				
+		<pre></pre>
+	
+			</div>
+</div>
+
+
+	<a name="sec-const-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constant Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+						<span class="disabled">Constants</span> (<a href="#sec-consts">details</a>)
+												<a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>)
+				 
+				|
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<div class="const-summary">
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_ID" title="details" class="const-name">SVN_ID</a> = 					<span class="var-type"> '$Id: Response.php 54 2011-02-04 16:29:18Z donovan.jimenez $'</span>
+
+				</div>
+								<div class="const-title">
+					<img src="../../media/images/Constant.png" alt=" " />
+					<a href="#SVN_REVISION" title="details" class="const-name">SVN_REVISION</a> = 					<span class="var-type"> '$Revision: 54 $'</span>
+
+				</div>
+							</div>
+		</div>
+	</div>
+
+	<a name="sec-var-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Variable Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+						<span class="disabled">Vars</span> (<a href="#sec-vars">details</a>)
+							| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+															<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<div class="var-summary">
+																																																								<div class="var-title">
+					<span class="var-type">mixed</span>
+					<a href="#$_collapseSingleValueArrays" title="details" class="var-name">$_collapseSingleValueArrays</a>
+				</div>
+																<div class="var-title">
+					<span class="var-type">boolean</span>
+					<a href="#$_createDocuments" title="details" class="var-name">$_createDocuments</a>
+				</div>
+																<div class="var-title">
+					<span class="var-type">boolean</span>
+					<a href="#$_isParsed" title="details" class="var-name">$_isParsed</a>
+				</div>
+																<div class="var-title">
+					<span class="var-type">mixed</span>
+					<a href="#$_parsedData" title="details" class="var-name">$_parsedData</a>
+				</div>
+																<div class="var-title">
+					<span class="var-type"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+					<a href="#$_response" title="details" class="var-name">$_response</a>
+				</div>
+											</div>
+		</div>
+	</div>
+
+	<a name="sec-method-summary"></a>
+	<div class="info-box">
+		<div class="info-box-title">Method Summary</span></div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+															<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+															<a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>)
+				 
+				|
+						<span class="disabled">Methods</span> (<a href="#sec-methods">details</a>)
+		</div>
+		<div class="info-box-body">			
+			<div class="method-summary">
+																																																																																						
+				<div class="method-definition">
+											<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+										<a href="#__construct" title="details" class="method-name">__construct</a>
+											(<span class="var-type"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>&nbsp;<span class="var-name">$response</span>, [<span class="var-type">boolean</span>&nbsp;<span class="var-name">$createDocuments</span> = <span class="var-default">true</span>], [<span class="var-type">boolean</span>&nbsp;<span class="var-name">$collapseSingleValueArrays</span> = <span class="var-default">true</span>])
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getEncoding" title="details" class="method-name">getEncoding</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">integer</span>
+										<a href="#getHttpStatus" title="details" class="method-name">getHttpStatus</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getHttpStatusMessage" title="details" class="method-name">getHttpStatusMessage</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getRawResponse" title="details" class="method-name">getRawResponse</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">string</span>
+										<a href="#getType" title="details" class="method-name">getType</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">void</span>
+										<a href="#_parseData" title="details" class="method-name">_parseData</a>
+										()
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">mixed</span>
+										<a href="#__get" title="details" class="method-name">__get</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$key</span>)
+									</div>
+														
+				<div class="method-definition">
+											<span class="method-result">boolean</span>
+										<a href="#__isset" title="details" class="method-name">__isset</a>
+											(<span class="var-type">string</span>&nbsp;<span class="var-name">$key</span>)
+									</div>
+											</div>
+		</div>
+	</div>		
+
+	<a name="sec-vars"></a>
+	<div class="info-box">
+		<div class="info-box-title">Variables</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+										<a href="#sec-var-summary">Vars</a> (<span class="disabled">details</span>)
+						
+			
+												<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+										| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			
+<a name="var$_collapseSingleValueArrays" id="$_collapseSingleValueArrays"><!-- --></A>
+<div class="oddrow">
+
+	<div class="var-header">
+		<span class="var-title">
+			<span class="var-type">mixed</span>
+			<span class="var-name">$_collapseSingleValueArrays</span>
+			 = <span class="var-default"> true</span>			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a88">88</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	
+		
+		
+
+</div>
+<a name="var$_createDocuments" id="$_createDocuments"><!-- --></A>
+<div class="evenrow">
+
+	<div class="var-header">
+		<span class="var-title">
+			<span class="var-type">boolean</span>
+			<span class="var-name">$_createDocuments</span>
+			 = <span class="var-default"> true</span>			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a87">87</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Data parsing flags.  Determines what extra processing should be done  after the data is initially converted to a data structure.</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	
+		
+		
+
+</div>
+<a name="var$_isParsed" id="$_isParsed"><!-- --></A>
+<div class="oddrow">
+
+	<div class="var-header">
+		<span class="var-title">
+			<span class="var-type">boolean</span>
+			<span class="var-name">$_isParsed</span>
+			 = <span class="var-default"> false</span>			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a72">72</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Whether the raw response has been parsed</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	
+		
+		
+
+</div>
+<a name="var$_parsedData" id="$_parsedData"><!-- --></A>
+<div class="evenrow">
+
+	<div class="var-header">
+		<span class="var-title">
+			<span class="var-type">mixed</span>
+			<span class="var-name">$_parsedData</span>
+						(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a79">79</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Parsed representation of the data</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	
+		
+		
+
+</div>
+<a name="var$_response" id="$_response"><!-- --></A>
+<div class="oddrow">
+
+	<div class="var-header">
+		<span class="var-title">
+			<span class="var-type"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+			<span class="var-name">$_response</span>
+						(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a65">65</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Holds the raw response used in construction</p>
+	<ul class="tags">
+				<li><span class="field">var:</span> HTTP response</li>
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	
+		
+		
+
+</div>
+						
+		</div>
+	</div>
+	
+	<a name="sec-methods"></a>
+	<div class="info-box">
+		<div class="info-box-title">Methods</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+															<a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>)
+																			<a href="#sec-const-summary">Constants</a> (<a href="#sec-consts">details</a>)
+							
+										<a href="#sec-method-summary">Methods</a> (<span class="disabled">details</span>)
+						
+		</div>
+		<div class="info-box-body">
+			<A NAME='method_detail'></A>
+<a name="method__construct" id="__construct"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">Constructor __construct</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a97">97</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Constructor. Takes the raw HTTP response body and the exploded HTTP headers</p>
+	<ul class="tags">
+				<li><span class="field">return:</span> HTTP response</li>
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+		<span class="method-name">
+			__construct
+		</span>
+					(<span class="var-type"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>&nbsp;<span class="var-name">$response</span>, [<span class="var-type">boolean</span>&nbsp;<span class="var-name">$createDocuments</span> = <span class="var-default">true</span>], [<span class="var-type">boolean</span>&nbsp;<span class="var-name">$collapseSingleValueArrays</span> = <span class="var-default">true</span>])
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">boolean</span>
+				<span class="var-name">$createDocuments</span><span class="var-description">: Whether to convert the documents json_decoded as stdClass instances to Apache_Solr_Document instances</span>			</li>
+					<li>
+				<span class="var-type">boolean</span>
+				<span class="var-name">$collapseSingleValueArrays</span><span class="var-description">: Whether to make multivalued fields appear as single values</span>			</li>
+					<li>
+				<span class="var-type"><a href="../../Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></span>
+				<span class="var-name">$response</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="methodgetEncoding" id="getEncoding"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getEncoding</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a139">139</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get character encoding of this response. Should usually be utf-8, but just in case</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getEncoding
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetHttpStatus" id="getHttpStatus"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getHttpStatus</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a109">109</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the HTTP status code</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">integer</span>
+		<span class="method-name">
+			getHttpStatus
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetHttpStatusMessage" id="getHttpStatusMessage"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getHttpStatusMessage</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a119">119</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the HTTP status message of the response</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getHttpStatusMessage
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetRawResponse" id="getRawResponse"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">getRawResponse</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a149">149</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get the raw response as it was given to this object</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getRawResponse
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="methodgetType" id="getType"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">getType</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a129">129</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Get content type of this Solr response</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">string</span>
+		<span class="method-name">
+			getType
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="method_parseData" id="_parseData"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">_parseData</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a198">198</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Parse the raw response into the parsed_data array for access</p>
+	<ul class="tags">
+				<li><span class="field">throws:</span> Apache_Solr_ParserException If the data could not be parsed</li>
+				<li><span class="field">access:</span> protected</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">void</span>
+		<span class="method-name">
+			_parseData
+		</span>
+				()
+			</div>
+	
+		
+			
+	</div>
+<a name="method__get" id="__get"><!-- --></a>
+<div class="oddrow">
+	
+	<div class="method-header">
+		<span class="method-title">__get</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a160">160</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Magic get to expose the parsed data and to lazily load it</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">mixed</span>
+		<span class="method-name">
+			__get
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$key</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$key</span>			</li>
+				</ul>
+		
+			
+	</div>
+<a name="method__isset" id="__isset"><!-- --></a>
+<div class="evenrow">
+	
+	<div class="method-header">
+		<span class="method-title">__isset</span> (line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a182">182</a></span>)
+	</div> 
+	
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">Magic function for isset function on parsed data</p>
+	<ul class="tags">
+				<li><span class="field">access:</span> public</li>
+			</ul>
+	
+	<div class="method-signature">
+		<span class="method-result">boolean</span>
+		<span class="method-name">
+			__isset
+		</span>
+					(<span class="var-type">string</span>&nbsp;<span class="var-name">$key</span>)
+			</div>
+	
+			<ul class="parameters">
+					<li>
+				<span class="var-type">string</span>
+				<span class="var-name">$key</span>			</li>
+				</ul>
+		
+			
+	</div>
+						
+		</div>
+	</div>
+
+	<a name="sec-consts"></a>
+	<div class="info-box">
+		<div class="info-box-title">Class Constants</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+										<a href="#sec-var-summary">Constants</a> (<span class="disabled">details</span>)
+						
+			
+												<a href="#sec-var-summary">Vars</a> (<a href="#sec-vars">details</a>)
+														| 
+									<a href="#sec-method-summary">Methods</a> (<a href="#sec-methods">details</a>)
+							
+					</div>
+		<div class="info-box-body">
+			<a name="constSVN_ID" id="SVN_ID"><!-- --></A>
+<div class="oddrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_ID</span>
+			 = <span class="const-default"> '$Id: Response.php 54 2011-02-04 16:29:18Z donovan.jimenez $'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a58">58</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN ID meta data for this class</p>
+	
+	
+</div>
+<a name="constSVN_REVISION" id="SVN_REVISION"><!-- --></A>
+<div class="evenrow">
+
+	<div class="const-header">
+		<img src="../../media/images/Variable.png" />
+		<span class="const-title">
+			<span class="const-name">SVN_REVISION</span>
+			 = <span class="const-default"> '$Revision: 54 $'</span>
+			(line <span class="line-number"><a href="../../__filesource/fsource_Apache_Solr_Response.php.html#a53">53</a></span>)
+		</span>
+	</div>
+
+	<!-- ========== Info from phpDoc block ========= -->
+<p class="short-description">SVN Revision meta data for this class</p>
+	
+	
+</div>
+						
+		</div>
+	</div>
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

File diff suppressed because it is too large
+ 40 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Service.html


File diff suppressed because it is too large
+ 178 - 0
SolrPhpClient/phpdocs/Apache/Solr/Apache_Solr_Service_Balancer.html


File diff suppressed because it is too large
+ 28 - 0
SolrPhpClient/phpdocs/Apache/Solr/_Document.php.html


+ 63 - 0
SolrPhpClient/phpdocs/Apache/Solr/_Exception.php.html

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page Exception.php</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/Exception.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+														</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_Apache_Solr_Exception.php.html">Source Code for this file</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+																	</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../../Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a>
+					</td>
+					<td>
+											Copyright (c) 2007-2011, Servigistics, Inc.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:13 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

File diff suppressed because it is too large
+ 28 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Abstract.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Curl.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---CurlNoReuse.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---FileGetContents.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Interface.php.html


File diff suppressed because it is too large
+ 28 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransport---Response.php.html


+ 63 - 0
SolrPhpClient/phpdocs/Apache/Solr/_HttpTransportException.php.html

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page HttpTransportException.php</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/HttpTransportException.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+														</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_Apache_Solr_HttpTransportException.php.html">Source Code for this file</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+																	</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../../Apache/Solr/Apache_Solr_HttpTransportException.html">Apache_Solr_HttpTransportException</a>
+					</td>
+					<td>
+											Copyright (c) 2007-2011, Servigistics, Inc.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:14 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 63 - 0
SolrPhpClient/phpdocs/Apache/Solr/_InvalidArgumentException.php.html

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page InvalidArgumentException.php</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/InvalidArgumentException.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+														</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_Apache_Solr_InvalidArgumentException.php.html">Source Code for this file</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+																	</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../../Apache/Solr/Apache_Solr_InvalidArgumentException.html">Apache_Solr_InvalidArgumentException</a>
+					</td>
+					<td>
+											Copyright (c) 2007-2011, Servigistics, Inc.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 63 - 0
SolrPhpClient/phpdocs/Apache/Solr/_NoServiceAvailableException.php.html

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page NoServiceAvailableException.php</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/NoServiceAvailableException.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+														</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_Apache_Solr_NoServiceAvailableException.php.html">Source Code for this file</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+																	</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../../Apache/Solr/Apache_Solr_NoServiceAvailableException.html">Apache_Solr_NoServiceAvailableException</a>
+					</td>
+					<td>
+											Copyright (c) 2007-2011, Servigistics, Inc.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

+ 63 - 0
SolrPhpClient/phpdocs/Apache/Solr/_ParserException.php.html

@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Docs for page ParserException.php</title>
+			<link rel="stylesheet" href="../../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="page-body">			
+<h2 class="file-name">/ParserException.php</h2>
+
+<a name="sec-description"></a>
+<div class="info-box">
+	<div class="info-box-title">Description</div>
+	<div class="nav-bar">
+					<span class="disabled">Description</span> |
+							<a href="#sec-classes">Classes</a>
+														</div>
+	<div class="info-box-body">	
+		<!-- ========== Info from phpDoc block ========= -->
+	<ul class="tags">
+				<li><span class="field">filesource:</span> <a href="../../__filesource/fsource_Apache_Solr_ParserException.php.html">Source Code for this file</a></li>
+			</ul>
+		
+			</div>
+</div>
+		
+	<a name="sec-classes"></a>	
+	<div class="info-box">
+		<div class="info-box-title">Classes</div>
+		<div class="nav-bar">
+			<a href="#sec-description">Description</a> |
+			<span class="disabled">Classes</span>
+																	</div>
+		<div class="info-box-body">	
+			<table cellpadding="2" cellspacing="0" class="class-table">
+				<tr>
+					<th class="class-table-header">Class</th>
+					<th class="class-table-header">Description</th>
+				</tr>
+								<tr>
+					<td style="padding-right: 2em; vertical-align: top">
+						<a href="../../Apache/Solr/Apache_Solr_ParserException.html">Apache_Solr_ParserException</a>
+					</td>
+					<td>
+											Copyright (c) 2007-2011, Servigistics, Inc.
+										</td>
+				</tr>
+							</table>
+		</div>
+	</div>
+
+	
+	
+	
+	
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</div></body>
+</html>

File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_Response.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_Service---Balancer.php.html


File diff suppressed because it is too large
+ 29 - 0
SolrPhpClient/phpdocs/Apache/Solr/_Service.php.html


File diff suppressed because it is too large
+ 166 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Document.php.html


+ 70 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Exception.php.html

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>File Source for Exception.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<h1>Source for file Exception.php</h1>
+<p>Documentation is available at <a href="../Apache/Solr/_Exception.php.html">Exception.php</a></p>
+<div class="src-code">
+<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php">&lt;?php</span></div></li>
+<li><div class="src-line"><a name="a2"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a3"></a><span class="src-doc">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2007-2011,&nbsp;Servigistics,&nbsp;Inc.</span></div></li>
+<li><div class="src-line"><a name="a4"></a><span class="src-doc">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.</span></div></li>
+<li><div class="src-line"><a name="a5"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a6"></a><span class="src-doc">&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without</span></div></li>
+<li><div class="src-line"><a name="a7"></a><span class="src-doc">&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions&nbsp;are&nbsp;met:</span></div></li>
+<li><div class="src-line"><a name="a8"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a9"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright&nbsp;notice,</span></div></li>
+<li><div class="src-line"><a name="a10"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.</span></div></li>
+<li><div class="src-line"><a name="a11"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright</span></div></li>
+<li><div class="src-line"><a name="a12"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the</span></div></li>
+<li><div class="src-line"><a name="a13"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.</span></div></li>
+<li><div class="src-line"><a name="a14"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;Servigistics,&nbsp;Inc.&nbsp;nor&nbsp;the&nbsp;names&nbsp;of</span></div></li>
+<li><div class="src-line"><a name="a15"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;its&nbsp;contributors&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from</span></div></li>
+<li><div class="src-line"><a name="a16"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;software&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.</span></div></li>
+<li><div class="src-line"><a name="a17"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a18"></a><span class="src-doc">&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;COPYRIGHT&nbsp;HOLDERS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;&quot;AS&nbsp;IS&quot;</span></div></li>
+<li><div class="src-line"><a name="a19"></a><span class="src-doc">&nbsp;*&nbsp;AND&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a20"></a><span class="src-doc">&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE</span></div></li>
+<li><div class="src-line"><a name="a21"></a><span class="src-doc">&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;COPYRIGHT&nbsp;OWNER&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE</span></div></li>
+<li><div class="src-line"><a name="a22"></a><span class="src-doc">&nbsp;*&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR</span></div></li>
+<li><div class="src-line"><a name="a23"></a><span class="src-doc">&nbsp;*&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF</span></div></li>
+<li><div class="src-line"><a name="a24"></a><span class="src-doc">&nbsp;*&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS</span></div></li>
+<li><div class="src-line"><a name="a25"></a><span class="src-doc">&nbsp;*&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN</span></div></li>
+<li><div class="src-line"><a name="a26"></a><span class="src-doc">&nbsp;*&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)</span></div></li>
+<li><div class="src-line"><a name="a27"></a><span class="src-doc">&nbsp;*&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a28"></a><span class="src-doc">&nbsp;*&nbsp;POSSIBILITY&nbsp;OF&nbsp;SUCH&nbsp;DAMAGE.</span></div></li>
+<li><div class="src-line"><a name="a29"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a30"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@copyright</span><span class="src-doc">&nbsp;Copyright&nbsp;2007-2011&nbsp;Servigistics,&nbsp;Inc.&nbsp;(http://servigistics.com)</span></div></li>
+<li><div class="src-line"><a name="a31"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@license</span><span class="src-doc">&nbsp;http://solr-php-client.googlecode.com/svn/trunk/COPYING&nbsp;New&nbsp;BSD</span></div></li>
+<li><div class="src-line"><a name="a32"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@version</span><span class="src-doc">&nbsp;$Id:&nbsp;Exception.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$</span></div></li>
+<li><div class="src-line"><a name="a33"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a34"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@package</span><span class="src-doc">&nbsp;Apache</span></div></li>
+<li><div class="src-line"><a name="a35"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@subpackage</span><span class="src-doc">&nbsp;Solr</span></div></li>
+<li><div class="src-line"><a name="a36"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@author</span><span class="src-doc">&nbsp;Donovan&nbsp;Jimenez&nbsp;&lt;djimenez@conduit-it.com&gt;</span></div></li>
+<li><div class="src-line"><a name="a37"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a38"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a39"></a><span class="src-key">class&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a>&nbsp;<span class="src-key">extends&nbsp;</span><span class="src-id">Exception</span></div></li>
+<li><div class="src-line"><a name="a40"></a><span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a41"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a42"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;Revision&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a43"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a44"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html#constSVN_REVISION">SVN_REVISION</a>&nbsp;=&nbsp;<span class="src-str">'$Revision:&nbsp;54&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a45"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a46"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a47"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;ID&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a48"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a49"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html#constSVN_ID">SVN_ID</a>&nbsp;=&nbsp;<span class="src-str">'$Id:&nbsp;Exception.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a50"></a><span class="src-sym">}</span></div></li>
+</ol></div>
+</div>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:13 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 109 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportAbstract.php.html

@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>File Source for Abstract.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<h1>Source for file Abstract.php</h1>
+<p>Documentation is available at <a href="../Apache/Solr/_HttpTransport---Abstract.php.html">Abstract.php</a></p>
+<div class="src-code">
+<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php">&lt;?php</span></div></li>
+<li><div class="src-line"><a name="a2"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a3"></a><span class="src-doc">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2007-2011,&nbsp;Servigistics,&nbsp;Inc.</span></div></li>
+<li><div class="src-line"><a name="a4"></a><span class="src-doc">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.</span></div></li>
+<li><div class="src-line"><a name="a5"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a6"></a><span class="src-doc">&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without</span></div></li>
+<li><div class="src-line"><a name="a7"></a><span class="src-doc">&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions&nbsp;are&nbsp;met:</span></div></li>
+<li><div class="src-line"><a name="a8"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a9"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright&nbsp;notice,</span></div></li>
+<li><div class="src-line"><a name="a10"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.</span></div></li>
+<li><div class="src-line"><a name="a11"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright</span></div></li>
+<li><div class="src-line"><a name="a12"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the</span></div></li>
+<li><div class="src-line"><a name="a13"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.</span></div></li>
+<li><div class="src-line"><a name="a14"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;Servigistics,&nbsp;Inc.&nbsp;nor&nbsp;the&nbsp;names&nbsp;of</span></div></li>
+<li><div class="src-line"><a name="a15"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;its&nbsp;contributors&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from</span></div></li>
+<li><div class="src-line"><a name="a16"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;software&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.</span></div></li>
+<li><div class="src-line"><a name="a17"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a18"></a><span class="src-doc">&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;COPYRIGHT&nbsp;HOLDERS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;&quot;AS&nbsp;IS&quot;</span></div></li>
+<li><div class="src-line"><a name="a19"></a><span class="src-doc">&nbsp;*&nbsp;AND&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a20"></a><span class="src-doc">&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE</span></div></li>
+<li><div class="src-line"><a name="a21"></a><span class="src-doc">&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;COPYRIGHT&nbsp;OWNER&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE</span></div></li>
+<li><div class="src-line"><a name="a22"></a><span class="src-doc">&nbsp;*&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR</span></div></li>
+<li><div class="src-line"><a name="a23"></a><span class="src-doc">&nbsp;*&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF</span></div></li>
+<li><div class="src-line"><a name="a24"></a><span class="src-doc">&nbsp;*&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS</span></div></li>
+<li><div class="src-line"><a name="a25"></a><span class="src-doc">&nbsp;*&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN</span></div></li>
+<li><div class="src-line"><a name="a26"></a><span class="src-doc">&nbsp;*&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)</span></div></li>
+<li><div class="src-line"><a name="a27"></a><span class="src-doc">&nbsp;*&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a28"></a><span class="src-doc">&nbsp;*&nbsp;POSSIBILITY&nbsp;OF&nbsp;SUCH&nbsp;DAMAGE.</span></div></li>
+<li><div class="src-line"><a name="a29"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a30"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@copyright</span><span class="src-doc">&nbsp;Copyright&nbsp;2007-2011&nbsp;Servigistics,&nbsp;Inc.&nbsp;(http://servigistics.com)</span></div></li>
+<li><div class="src-line"><a name="a31"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@license</span><span class="src-doc">&nbsp;http://solr-php-client.googlecode.com/svn/trunk/COPYING&nbsp;New&nbsp;BSD</span></div></li>
+<li><div class="src-line"><a name="a32"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@version</span><span class="src-doc">&nbsp;$Id:&nbsp;$</span></div></li>
+<li><div class="src-line"><a name="a33"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a34"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@package</span><span class="src-doc">&nbsp;Apache</span></div></li>
+<li><div class="src-line"><a name="a35"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@subpackage</span><span class="src-doc">&nbsp;Solr</span></div></li>
+<li><div class="src-line"><a name="a36"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@author</span><span class="src-doc">&nbsp;Timo&nbsp;Schmidt&nbsp;&lt;timo.schmidt@aoemedia.de&gt;,&nbsp;Donovan&nbsp;Jimenez&nbsp;&lt;djimenez@conduit-it.com&gt;</span></div></li>
+<li><div class="src-line"><a name="a37"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a38"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a39"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a40"></a><span class="src-doc">&nbsp;*&nbsp;Convenience&nbsp;class&nbsp;that&nbsp;implements&nbsp;the&nbsp;transport&nbsp;implementation.&nbsp;Can&nbsp;be&nbsp;extended&nbsp;by</span></div></li>
+<li><div class="src-line"><a name="a41"></a><span class="src-doc">&nbsp;*&nbsp;real&nbsp;implementations&nbsp;to&nbsp;do&nbsp;some&nbsp;of&nbsp;the&nbsp;common&nbsp;book&nbsp;keeping</span></div></li>
+<li><div class="src-line"><a name="a42"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a43"></a><span class="src-key">abstract&nbsp;</span><span class="src-key">class&nbsp;</span><a href="../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a>&nbsp;<span class="src-key">implements&nbsp;</span><span class="src-id">Apache_Solr_HttpTransport_Interface</span></div></li>
+<li><div class="src-line"><a name="a44"></a><span class="src-sym">{&nbsp;&nbsp;&nbsp;&nbsp;</span></div></li>
+<li><div class="src-line"><a name="a45"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a46"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Our&nbsp;default&nbsp;timeout&nbsp;value&nbsp;for&nbsp;requests&nbsp;that&nbsp;don't&nbsp;specify&nbsp;a&nbsp;timeout</span></div></li>
+<li><div class="src-line"><a name="a47"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a48"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span class="src-doc-coretag">@var&nbsp;</span><span class="src-doc-type">float&nbsp;</span></div></li>
+<li><div class="src-line"><a name="a49"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a50"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">private&nbsp;</span><span class="src-var">$_defaultTimeout&nbsp;</span>=&nbsp;<span class="src-id">false</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a51"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
+<li><div class="src-line"><a name="a52"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a53"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;the&nbsp;current&nbsp;default&nbsp;timeout&nbsp;setting&nbsp;(initially&nbsp;the&nbsp;default_socket_timeout&nbsp;ini&nbsp;setting)</span></div></li>
+<li><div class="src-line"><a name="a54"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;in&nbsp;seconds</span></div></li>
+<li><div class="src-line"><a name="a55"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a56"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span class="src-doc-coretag">@return&nbsp;</span><span class="src-doc-type">float&nbsp;</span></div></li>
+<li><div class="src-line"><a name="a57"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a58"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">public&nbsp;</span><span class="src-key">function&nbsp;</span><a href="../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">getDefaultTimeout</a><span class="src-sym">(</span><span class="src-sym">)</span></div></li>
+<li><div class="src-line"><a name="a59"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a60"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;lazy&nbsp;load&nbsp;the&nbsp;default&nbsp;timeout&nbsp;from&nbsp;the&nbsp;ini&nbsp;settings</span></div></li>
+<li><div class="src-line"><a name="a61"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">if&nbsp;</span><span class="src-sym">(</span><span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout&nbsp;</span>===&nbsp;<span class="src-id">false</span><span class="src-sym">)</span></div></li>
+<li><div class="src-line"><a name="a62"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a63"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout&nbsp;</span>=&nbsp;(int)&nbsp;<a href="http://www.php.net/ini_get">ini_get</a><span class="src-sym">(</span><span class="src-str">'default_socket_timeout'</span><span class="src-sym">)</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a64"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a65"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-comm">//&nbsp;double&nbsp;check&nbsp;we&nbsp;didn't&nbsp;get&nbsp;0&nbsp;for&nbsp;a&nbsp;timeout</span></div></li>
+<li><div class="src-line"><a name="a66"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">if&nbsp;</span><span class="src-sym">(</span><span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout&nbsp;</span>&lt;=&nbsp;<span class="src-num">0</span><span class="src-sym">)</span></div></li>
+<li><div class="src-line"><a name="a67"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a68"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout&nbsp;</span>=&nbsp;<span class="src-num">60</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a69"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
+<li><div class="src-line"><a name="a70"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
+<li><div class="src-line"><a name="a71"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
+<li><div class="src-line"><a name="a72"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">return&nbsp;</span><span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a73"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
+<li><div class="src-line"><a name="a74"></a>&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
+<li><div class="src-line"><a name="a75"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a76"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Set&nbsp;the&nbsp;current&nbsp;default&nbsp;timeout&nbsp;for&nbsp;all&nbsp;HTTP&nbsp;requests</span></div></li>
+<li><div class="src-line"><a name="a77"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a78"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span class="src-doc-coretag">@param&nbsp;</span><span class="src-doc-type">float&nbsp;</span><span class="src-doc-var">$timeout&nbsp;</span></div></li>
+<li><div class="src-line"><a name="a79"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a80"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">public&nbsp;</span><span class="src-key">function&nbsp;</span><a href="../Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">setDefaultTimeout</a><span class="src-sym">(</span><span class="src-var">$timeout</span><span class="src-sym">)</span></div></li>
+<li><div class="src-line"><a name="a81"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a82"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$timeout&nbsp;</span>=&nbsp;(float)&nbsp;<span class="src-var">$timeout</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a83"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div></li>
+<li><div class="src-line"><a name="a84"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">if&nbsp;</span><span class="src-sym">(</span><span class="src-var">$timeout&nbsp;</span>&gt;=&nbsp;<span class="src-num">0</span><span class="src-sym">)</span></div></li>
+<li><div class="src-line"><a name="a85"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a86"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-var">$this</span><span class="src-sym">-&gt;</span><span class="src-var">_defaultTimeout&nbsp;</span>=&nbsp;<span class="src-var">$timeout</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a87"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}</span></div></li>
+<li><div class="src-line"><a name="a88"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-sym">}&nbsp;&nbsp;&nbsp;&nbsp;</span></div></li>
+<li><div class="src-line"><a name="a89"></a><span class="src-sym">}</span></div></li>
+</ol></div>
+</div>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:08 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

File diff suppressed because it is too large
+ 137 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportCurl.php.html


File diff suppressed because it is too large
+ 110 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportCurlNoReuse.php.html


File diff suppressed because it is too large
+ 77 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportException.php.html


File diff suppressed because it is too large
+ 95 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportFileGetContents.php.html


File diff suppressed because it is too large
+ 83 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportInterface.php.html


File diff suppressed because it is too large
+ 178 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_HttpTransportResponse.php.html


+ 70 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_InvalidArgumentException.php.html

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>File Source for InvalidArgumentException.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<h1>Source for file InvalidArgumentException.php</h1>
+<p>Documentation is available at <a href="../Apache/Solr/_InvalidArgumentException.php.html">InvalidArgumentException.php</a></p>
+<div class="src-code">
+<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php">&lt;?php</span></div></li>
+<li><div class="src-line"><a name="a2"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a3"></a><span class="src-doc">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2007-2011,&nbsp;Servigistics,&nbsp;Inc.</span></div></li>
+<li><div class="src-line"><a name="a4"></a><span class="src-doc">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.</span></div></li>
+<li><div class="src-line"><a name="a5"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a6"></a><span class="src-doc">&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without</span></div></li>
+<li><div class="src-line"><a name="a7"></a><span class="src-doc">&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions&nbsp;are&nbsp;met:</span></div></li>
+<li><div class="src-line"><a name="a8"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a9"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright&nbsp;notice,</span></div></li>
+<li><div class="src-line"><a name="a10"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.</span></div></li>
+<li><div class="src-line"><a name="a11"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright</span></div></li>
+<li><div class="src-line"><a name="a12"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the</span></div></li>
+<li><div class="src-line"><a name="a13"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.</span></div></li>
+<li><div class="src-line"><a name="a14"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;Servigistics,&nbsp;Inc.&nbsp;nor&nbsp;the&nbsp;names&nbsp;of</span></div></li>
+<li><div class="src-line"><a name="a15"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;its&nbsp;contributors&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from</span></div></li>
+<li><div class="src-line"><a name="a16"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;software&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.</span></div></li>
+<li><div class="src-line"><a name="a17"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a18"></a><span class="src-doc">&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;COPYRIGHT&nbsp;HOLDERS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;&quot;AS&nbsp;IS&quot;</span></div></li>
+<li><div class="src-line"><a name="a19"></a><span class="src-doc">&nbsp;*&nbsp;AND&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a20"></a><span class="src-doc">&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE</span></div></li>
+<li><div class="src-line"><a name="a21"></a><span class="src-doc">&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;COPYRIGHT&nbsp;OWNER&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE</span></div></li>
+<li><div class="src-line"><a name="a22"></a><span class="src-doc">&nbsp;*&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR</span></div></li>
+<li><div class="src-line"><a name="a23"></a><span class="src-doc">&nbsp;*&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF</span></div></li>
+<li><div class="src-line"><a name="a24"></a><span class="src-doc">&nbsp;*&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS</span></div></li>
+<li><div class="src-line"><a name="a25"></a><span class="src-doc">&nbsp;*&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN</span></div></li>
+<li><div class="src-line"><a name="a26"></a><span class="src-doc">&nbsp;*&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)</span></div></li>
+<li><div class="src-line"><a name="a27"></a><span class="src-doc">&nbsp;*&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a28"></a><span class="src-doc">&nbsp;*&nbsp;POSSIBILITY&nbsp;OF&nbsp;SUCH&nbsp;DAMAGE.</span></div></li>
+<li><div class="src-line"><a name="a29"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a30"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@copyright</span><span class="src-doc">&nbsp;Copyright&nbsp;2007-2011&nbsp;Servigistics,&nbsp;Inc.&nbsp;(http://servigistics.com)</span></div></li>
+<li><div class="src-line"><a name="a31"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@license</span><span class="src-doc">&nbsp;http://solr-php-client.googlecode.com/svn/trunk/COPYING&nbsp;New&nbsp;BSD</span></div></li>
+<li><div class="src-line"><a name="a32"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@version</span><span class="src-doc">&nbsp;$Id:&nbsp;InvalidArgumentException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$</span></div></li>
+<li><div class="src-line"><a name="a33"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a34"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@package</span><span class="src-doc">&nbsp;Apache</span></div></li>
+<li><div class="src-line"><a name="a35"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@subpackage</span><span class="src-doc">&nbsp;Solr</span></div></li>
+<li><div class="src-line"><a name="a36"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@author</span><span class="src-doc">&nbsp;Donovan&nbsp;Jimenez&nbsp;&lt;djimenez@conduit-it.com&gt;</span></div></li>
+<li><div class="src-line"><a name="a37"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a38"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a39"></a><span class="src-key">class&nbsp;</span><a href="../Apache/Solr/Apache_Solr_InvalidArgumentException.html">Apache_Solr_InvalidArgumentException</a>&nbsp;<span class="src-key">extends&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a></div></li>
+<li><div class="src-line"><a name="a40"></a><span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a41"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a42"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;Revision&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a43"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a44"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_REVISION">SVN_REVISION</a>&nbsp;=&nbsp;<span class="src-str">'$Revision:&nbsp;54&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a45"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a46"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a47"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;ID&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a48"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a49"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_ID">SVN_ID</a>&nbsp;=&nbsp;<span class="src-str">'$Id:&nbsp;InvalidArgumentException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a50"></a><span class="src-sym">}</span></div></li>
+</ol></div>
+</div>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 70 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_NoServiceAvailableException.php.html

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>File Source for NoServiceAvailableException.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<h1>Source for file NoServiceAvailableException.php</h1>
+<p>Documentation is available at <a href="../Apache/Solr/_NoServiceAvailableException.php.html">NoServiceAvailableException.php</a></p>
+<div class="src-code">
+<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php">&lt;?php</span></div></li>
+<li><div class="src-line"><a name="a2"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a3"></a><span class="src-doc">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2007-2011,&nbsp;Servigistics,&nbsp;Inc.</span></div></li>
+<li><div class="src-line"><a name="a4"></a><span class="src-doc">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.</span></div></li>
+<li><div class="src-line"><a name="a5"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a6"></a><span class="src-doc">&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without</span></div></li>
+<li><div class="src-line"><a name="a7"></a><span class="src-doc">&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions&nbsp;are&nbsp;met:</span></div></li>
+<li><div class="src-line"><a name="a8"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a9"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright&nbsp;notice,</span></div></li>
+<li><div class="src-line"><a name="a10"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.</span></div></li>
+<li><div class="src-line"><a name="a11"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright</span></div></li>
+<li><div class="src-line"><a name="a12"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the</span></div></li>
+<li><div class="src-line"><a name="a13"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.</span></div></li>
+<li><div class="src-line"><a name="a14"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;Servigistics,&nbsp;Inc.&nbsp;nor&nbsp;the&nbsp;names&nbsp;of</span></div></li>
+<li><div class="src-line"><a name="a15"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;its&nbsp;contributors&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from</span></div></li>
+<li><div class="src-line"><a name="a16"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;software&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.</span></div></li>
+<li><div class="src-line"><a name="a17"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a18"></a><span class="src-doc">&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;COPYRIGHT&nbsp;HOLDERS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;&quot;AS&nbsp;IS&quot;</span></div></li>
+<li><div class="src-line"><a name="a19"></a><span class="src-doc">&nbsp;*&nbsp;AND&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a20"></a><span class="src-doc">&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE</span></div></li>
+<li><div class="src-line"><a name="a21"></a><span class="src-doc">&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;COPYRIGHT&nbsp;OWNER&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE</span></div></li>
+<li><div class="src-line"><a name="a22"></a><span class="src-doc">&nbsp;*&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR</span></div></li>
+<li><div class="src-line"><a name="a23"></a><span class="src-doc">&nbsp;*&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF</span></div></li>
+<li><div class="src-line"><a name="a24"></a><span class="src-doc">&nbsp;*&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS</span></div></li>
+<li><div class="src-line"><a name="a25"></a><span class="src-doc">&nbsp;*&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN</span></div></li>
+<li><div class="src-line"><a name="a26"></a><span class="src-doc">&nbsp;*&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)</span></div></li>
+<li><div class="src-line"><a name="a27"></a><span class="src-doc">&nbsp;*&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a28"></a><span class="src-doc">&nbsp;*&nbsp;POSSIBILITY&nbsp;OF&nbsp;SUCH&nbsp;DAMAGE.</span></div></li>
+<li><div class="src-line"><a name="a29"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a30"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@copyright</span><span class="src-doc">&nbsp;Copyright&nbsp;2007-2011&nbsp;Servigistics,&nbsp;Inc.&nbsp;(http://servigistics.com)</span></div></li>
+<li><div class="src-line"><a name="a31"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@license</span><span class="src-doc">&nbsp;http://solr-php-client.googlecode.com/svn/trunk/COPYING&nbsp;New&nbsp;BSD</span></div></li>
+<li><div class="src-line"><a name="a32"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@version</span><span class="src-doc">&nbsp;$Id:&nbsp;NoServiceAvailableException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$</span></div></li>
+<li><div class="src-line"><a name="a33"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a34"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@package</span><span class="src-doc">&nbsp;Apache</span></div></li>
+<li><div class="src-line"><a name="a35"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@subpackage</span><span class="src-doc">&nbsp;Solr</span></div></li>
+<li><div class="src-line"><a name="a36"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@author</span><span class="src-doc">&nbsp;Donovan&nbsp;Jimenez&nbsp;&lt;djimenez@conduit-it.com&gt;</span></div></li>
+<li><div class="src-line"><a name="a37"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a38"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a39"></a><span class="src-key">class&nbsp;</span><a href="../Apache/Solr/Apache_Solr_NoServiceAvailableException.html">Apache_Solr_NoServiceAvailableException</a>&nbsp;<span class="src-key">extends&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a></div></li>
+<li><div class="src-line"><a name="a40"></a><span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a41"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a42"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;Revision&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a43"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a44"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_REVISION">SVN_REVISION</a>&nbsp;=&nbsp;<span class="src-str">'$Revision:&nbsp;54&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a45"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a46"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a47"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;ID&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a48"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a49"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_ID">SVN_ID</a>&nbsp;=&nbsp;<span class="src-str">'$Id:&nbsp;NoServiceAvailableException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a50"></a><span class="src-sym">}</span></div></li>
+</ol></div>
+</div>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 70 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_ParserException.php.html

@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>File Source for ParserException.php</title>
+			<link rel="stylesheet" href="../media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<h1>Source for file ParserException.php</h1>
+<p>Documentation is available at <a href="../Apache/Solr/_ParserException.php.html">ParserException.php</a></p>
+<div class="src-code">
+<div class="src-code"><ol><li><div class="src-line"><a name="a1"></a><span class="src-php">&lt;?php</span></div></li>
+<li><div class="src-line"><a name="a2"></a><span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a3"></a><span class="src-doc">&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;2007-2011,&nbsp;Servigistics,&nbsp;Inc.</span></div></li>
+<li><div class="src-line"><a name="a4"></a><span class="src-doc">&nbsp;*&nbsp;All&nbsp;rights&nbsp;reserved.</span></div></li>
+<li><div class="src-line"><a name="a5"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a6"></a><span class="src-doc">&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without</span></div></li>
+<li><div class="src-line"><a name="a7"></a><span class="src-doc">&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions&nbsp;are&nbsp;met:</span></div></li>
+<li><div class="src-line"><a name="a8"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a9"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright&nbsp;notice,</span></div></li>
+<li><div class="src-line"><a name="a10"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.</span></div></li>
+<li><div class="src-line"><a name="a11"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright</span></div></li>
+<li><div class="src-line"><a name="a12"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in&nbsp;the</span></div></li>
+<li><div class="src-line"><a name="a13"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the&nbsp;distribution.</span></div></li>
+<li><div class="src-line"><a name="a14"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;-&nbsp;Neither&nbsp;the&nbsp;name&nbsp;of&nbsp;Servigistics,&nbsp;Inc.&nbsp;nor&nbsp;the&nbsp;names&nbsp;of</span></div></li>
+<li><div class="src-line"><a name="a15"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;its&nbsp;contributors&nbsp;may&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from</span></div></li>
+<li><div class="src-line"><a name="a16"></a><span class="src-doc">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;software&nbsp;without&nbsp;specific&nbsp;prior&nbsp;written&nbsp;permission.</span></div></li>
+<li><div class="src-line"><a name="a17"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a18"></a><span class="src-doc">&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;BY&nbsp;THE&nbsp;COPYRIGHT&nbsp;HOLDERS&nbsp;AND&nbsp;CONTRIBUTORS&nbsp;&quot;AS&nbsp;IS&quot;</span></div></li>
+<li><div class="src-line"><a name="a19"></a><span class="src-doc">&nbsp;*&nbsp;AND&nbsp;ANY&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a20"></a><span class="src-doc">&nbsp;*&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE</span></div></li>
+<li><div class="src-line"><a name="a21"></a><span class="src-doc">&nbsp;*&nbsp;ARE&nbsp;DISCLAIMED.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;COPYRIGHT&nbsp;OWNER&nbsp;OR&nbsp;CONTRIBUTORS&nbsp;BE</span></div></li>
+<li><div class="src-line"><a name="a22"></a><span class="src-doc">&nbsp;*&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR</span></div></li>
+<li><div class="src-line"><a name="a23"></a><span class="src-doc">&nbsp;*&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF</span></div></li>
+<li><div class="src-line"><a name="a24"></a><span class="src-doc">&nbsp;*&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS</span></div></li>
+<li><div class="src-line"><a name="a25"></a><span class="src-doc">&nbsp;*&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN</span></div></li>
+<li><div class="src-line"><a name="a26"></a><span class="src-doc">&nbsp;*&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)</span></div></li>
+<li><div class="src-line"><a name="a27"></a><span class="src-doc">&nbsp;*&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE</span></div></li>
+<li><div class="src-line"><a name="a28"></a><span class="src-doc">&nbsp;*&nbsp;POSSIBILITY&nbsp;OF&nbsp;SUCH&nbsp;DAMAGE.</span></div></li>
+<li><div class="src-line"><a name="a29"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a30"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@copyright</span><span class="src-doc">&nbsp;Copyright&nbsp;2007-2011&nbsp;Servigistics,&nbsp;Inc.&nbsp;(http://servigistics.com)</span></div></li>
+<li><div class="src-line"><a name="a31"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@license</span><span class="src-doc">&nbsp;http://solr-php-client.googlecode.com/svn/trunk/COPYING&nbsp;New&nbsp;BSD</span></div></li>
+<li><div class="src-line"><a name="a32"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@version</span><span class="src-doc">&nbsp;$Id:&nbsp;ParserException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$</span></div></li>
+<li><div class="src-line"><a name="a33"></a><span class="src-doc">&nbsp;*</span></div></li>
+<li><div class="src-line"><a name="a34"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@package</span><span class="src-doc">&nbsp;Apache</span></div></li>
+<li><div class="src-line"><a name="a35"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@subpackage</span><span class="src-doc">&nbsp;Solr</span></div></li>
+<li><div class="src-line"><a name="a36"></a><span class="src-doc">&nbsp;*&nbsp;</span><span class="src-doc-coretag">@author</span><span class="src-doc">&nbsp;Donovan&nbsp;Jimenez&nbsp;&lt;djimenez@conduit-it.com&gt;</span></div></li>
+<li><div class="src-line"><a name="a37"></a><span class="src-doc">&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a38"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a39"></a><span class="src-key">class&nbsp;</span><a href="../Apache/Solr/Apache_Solr_ParserException.html">Apache_Solr_ParserException</a>&nbsp;<span class="src-key">extends&nbsp;</span><a href="../Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a></div></li>
+<li><div class="src-line"><a name="a40"></a><span class="src-sym">{</span></div></li>
+<li><div class="src-line"><a name="a41"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a42"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;Revision&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a43"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a44"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_ParserException.html#constSVN_REVISION">SVN_REVISION</a>&nbsp;=&nbsp;<span class="src-str">'$Revision:&nbsp;54&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a45"></a>&nbsp;</div></li>
+<li><div class="src-line"><a name="a46"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-doc">/**</span></div></li>
+<li><div class="src-line"><a name="a47"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;SVN&nbsp;ID&nbsp;meta&nbsp;data&nbsp;for&nbsp;this&nbsp;class</span></div></li>
+<li><div class="src-line"><a name="a48"></a><span class="src-doc">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span></div></li>
+<li><div class="src-line"><a name="a49"></a>&nbsp;&nbsp;&nbsp;&nbsp;<span class="src-key">const&nbsp;</span><a href="../Apache/Solr/Apache_Solr_ParserException.html#constSVN_ID">SVN_ID</a>&nbsp;=&nbsp;<span class="src-str">'$Id:&nbsp;ParserException.php&nbsp;54&nbsp;2011-02-04&nbsp;16:29:18Z&nbsp;donovan.jimenez&nbsp;$'</span><span class="src-sym">;</span></div></li>
+<li><div class="src-line"><a name="a50"></a><span class="src-sym">}</span></div></li>
+</ol></div>
+</div>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:15 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

File diff suppressed because it is too large
+ 109 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Response.php.html


File diff suppressed because it is too large
+ 173 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_Service.php.html


File diff suppressed because it is too large
+ 133 - 0
SolrPhpClient/phpdocs/__filesource/fsource_Apache_Solr_ServiceBalancer.php.html


+ 13 - 0
SolrPhpClient/phpdocs/blank.html

@@ -0,0 +1,13 @@
+<html>
+<head>
+	<title>Generated Documentation</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+</head>
+<body>
+<div align="center"><h1>Generated Documentation</h1></div>
+<b>Welcome to Apache!</b><br />
+<br />
+This documentation was generated by <a href="http://www.phpdoc.org">phpDocumentor v1.4.3</a><br />
+</body>
+</html>

+ 56 - 0
SolrPhpClient/phpdocs/classtrees_Apache.html

@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						
+<!-- Start of Class Data -->
+<H2>
+	
+</H2>
+<h2>Root interface Apache_Solr_HttpTransport_Interface</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html">Apache_Solr_HttpTransport_Interface</a></li></ul>
+
+<h2>Root class Apache_Solr_Document</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a></li></ul>
+
+<h2>Root class Apache_Solr_HttpTransport_Abstract</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a> (implements <a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html">Apache_Solr_HttpTransport_Interface</a>)<ul>
+<li><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html">Apache_Solr_HttpTransport_Curl</a></li><li><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html">Apache_Solr_HttpTransport_CurlNoReuse</a></li><li><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html">Apache_Solr_HttpTransport_FileGetContents</a></li></ul></li>
+</ul>
+
+<h2>Root class Apache_Solr_HttpTransport_Response</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a></li></ul>
+
+<h2>Root class Apache_Solr_Response</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a></li></ul>
+
+<h2>Root class Apache_Solr_Service</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_Service.html">Apache_Solr_Service</a></li></ul>
+
+<h2>Root class Apache_Solr_Service_Balancer</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_Service_Balancer.html">Apache_Solr_Service_Balancer</a></li></ul>
+
+<h2>Root class Exception</h2>
+<ul>
+<li><a href="Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a><ul>
+<li><a href="Apache/Solr/Apache_Solr_HttpTransportException.html">Apache_Solr_HttpTransportException</a></li><li><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html">Apache_Solr_InvalidArgumentException</a></li><li><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html">Apache_Solr_NoServiceAvailableException</a></li><li><a href="Apache/Solr/Apache_Solr_ParserException.html">Apache_Solr_ParserException</a></li></ul></li>
+</ul>
+
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:08 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 1726 - 0
SolrPhpClient/phpdocs/elementindex.html

@@ -0,0 +1,1726 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a name="top"></a>
+<h2>Full index</h2>
+<h3>Package indexes</h3>
+<ul>
+	<li><a href="elementindex_Apache.html">Apache</a></li>
+</ul>
+<br />
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex.html#a">a</a>
+	<a class="index-letter" href="elementindex.html#b">b</a>
+	<a class="index-letter" href="elementindex.html#c">c</a>
+	<a class="index-letter" href="elementindex.html#d">d</a>
+	<a class="index-letter" href="elementindex.html#e">e</a>
+	<a class="index-letter" href="elementindex.html#f">f</a>
+	<a class="index-letter" href="elementindex.html#g">g</a>
+	<a class="index-letter" href="elementindex.html#h">h</a>
+	<a class="index-letter" href="elementindex.html#i">i</a>
+	<a class="index-letter" href="elementindex.html#m">m</a>
+	<a class="index-letter" href="elementindex.html#n">n</a>
+	<a class="index-letter" href="elementindex.html#o">o</a>
+	<a class="index-letter" href="elementindex.html#p">p</a>
+	<a class="index-letter" href="elementindex.html#r">r</a>
+	<a class="index-letter" href="elementindex.html#s">s</a>
+	<a class="index-letter" href="elementindex.html#t">t</a>
+	<a class="index-letter" href="elementindex.html#u">u</a>
+	<a class="index-letter" href="elementindex.html#_">_</a>
+</div>
+
+	<a name="a"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">a</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">add</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodadd">Apache_Solr_Service::add()</a> in Service.php</div>
+							<div class="index-item-description">Raw Add Method. Takes a raw post body and sends it to the update service.  Post body  should be a complete and well formed &quot;add&quot; xml document.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">add</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodadd">Apache_Solr_Service_Balancer::add()</a> in Balancer.php</div>
+							<div class="index-item-description">Raw Add Method. Takes a raw post body and sends it to the update service.  Post body  should be a complete and well formed &quot;add&quot; xml document.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocument</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddDocument">Apache_Solr_Service_Balancer::addDocument()</a> in Balancer.php</div>
+							<div class="index-item-description">Add a Solr Document to the index</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocument</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodaddDocument">Apache_Solr_Service::addDocument()</a> in Service.php</div>
+							<div class="index-item-description">Add a Solr Document to the index</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddDocuments">Apache_Solr_Service_Balancer::addDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Add an array of Solr Documents to the index all at once</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodaddDocuments">Apache_Solr_Service::addDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Add an array of Solr Documents to the index all at once</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodaddField">Apache_Solr_Document::addField()</a> in Document.php</div>
+							<div class="index-item-description">Add a value to a multi-valued field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddReadService">Apache_Solr_Service_Balancer::addReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Adds a service instance or service descriptor (if it is already  not added)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddWriteService">Apache_Solr_Service_Balancer::addWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Adds a service instance or service descriptor (if it is already  not added)</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Document
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> in Document.php</div>
+							<div class="index-item-description">Holds Key / Value pairs that represent a Solr Document along with any associated boost  values. Field values can be accessed by direct dereferencing such as:</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Exception
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a> in Exception.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransportException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html">Apache_Solr_HttpTransportException</a> in HttpTransportException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Abstract
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a> in Abstract.php</div>
+							<div class="index-item-description">Convenience class that implements the transport implementation. Can be extended by</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Curl
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html">Apache_Solr_HttpTransport_Curl</a> in Curl.php</div>
+							<div class="index-item-description">A Curl based HTTP transport. Uses a single curl session for all requests.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_CurlNoReuse
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html">Apache_Solr_HttpTransport_CurlNoReuse</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">An alternative Curl HTTP transport that opens and closes a curl session for  every request. This isn't the recommended way to use curl, but some version of  PHP have memory issues.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_FileGetContents
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html">Apache_Solr_HttpTransport_FileGetContents</a> in FileGetContents.php</div>
+							<div class="index-item-description">HTTP Transport implemenation that uses the builtin http URL wrappers and file_get_contents</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Interface
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html">Apache_Solr_HttpTransport_Interface</a> in Interface.php</div>
+							<div class="index-item-description">Interface that all Transport (HTTP Requester) implementations must implement. These</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Response
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a> in Response.php</div>
+							<div class="index-item-description">Represents the required pieces of an HTTP response provided by HTTP transport</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_InvalidArgumentException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html">Apache_Solr_InvalidArgumentException</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_NoServiceAvailableException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html">Apache_Solr_NoServiceAvailableException</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_ParserException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html">Apache_Solr_ParserException</a> in ParserException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Response
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> in Response.php</div>
+							<div class="index-item-description">Represents a Solr response.  Parses the raw response into a set of stdClass objects  and associative arrays for easy access.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Service
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html">Apache_Solr_Service</a> in Service.php</div>
+							<div class="index-item-description">Starting point for the Solr API. Represents a Solr server resource and has  methods for pinging, adding, deleting, committing, optimizing and searching.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Service_Balancer
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html">Apache_Solr_Service_Balancer</a> in Balancer.php</div>
+							<div class="index-item-description">Reference Implementation for using multiple Solr services in a distribution. Functionality</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Abstract.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Abstract.php.html">Abstract.php</a> in Abstract.php</div>
+					</dd>
+		</dl>
+	<a name="b"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">b</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Balancer.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Service---Balancer.php.html">Balancer.php</a> in Balancer.php</div>
+					</dd>
+		</dl>
+	<a name="c"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">c</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">clear</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodclear">Apache_Solr_Document::clear()</a> in Document.php</div>
+							<div class="index-item-description">Clear all boosts and fields from this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">commit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodcommit">Apache_Solr_Service_Balancer::commit()</a> in Balancer.php</div>
+							<div class="index-item-description">Send a commit command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">commit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodcommit">Apache_Solr_Service::commit()</a> in Service.php</div>
+							<div class="index-item-description">Send a commit command.  Will be synchronous unless both wait parameters are set to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Curl.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Curl.php.html">Curl.php</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">CurlNoReuse.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---CurlNoReuse.php.html">CurlNoReuse.php</a> in CurlNoReuse.php</div>
+					</dd>
+		</dl>
+	<a name="d"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">d</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">delete</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddelete">Apache_Solr_Service_Balancer::delete()</a> in Balancer.php</div>
+							<div class="index-item-description">Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be  a complete and well formed &quot;delete&quot; xml document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">delete</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddelete">Apache_Solr_Service::delete()</a> in Service.php</div>
+							<div class="index-item-description">Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be  a complete and well formed &quot;delete&quot; xml document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteById</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteById">Apache_Solr_Service_Balancer::deleteById()</a> in Balancer.php</div>
+							<div class="index-item-description">Create a delete document based on document ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteById</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteById">Apache_Solr_Service::deleteById()</a> in Service.php</div>
+							<div class="index-item-description">Create a delete document based on document ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByMultipleIds</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteByMultipleIds">Apache_Solr_Service_Balancer::deleteByMultipleIds()</a> in Balancer.php</div>
+							<div class="index-item-description">Create and post a delete document based on multiple document IDs.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByMultipleIds</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteByMultipleIds">Apache_Solr_Service::deleteByMultipleIds()</a> in Service.php</div>
+							<div class="index-item-description">Create and post a delete document based on multiple document IDs.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByQuery</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteByQuery">Apache_Solr_Service_Balancer::deleteByQuery()</a> in Balancer.php</div>
+							<div class="index-item-description">Create a delete document based on a query and submit it</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByQuery</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteByQuery">Apache_Solr_Service::deleteByQuery()</a> in Service.php</div>
+							<div class="index-item-description">Create a delete document based on a query and submit it</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Document.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Document.php.html">Document.php</a> in Document.php</div>
+					</dd>
+		</dl>
+	<a name="e"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">e</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">escape</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodescape">Apache_Solr_Service_Balancer::escape()</a> in Balancer.php</div>
+							<div class="index-item-description">Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escape</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodescape">Apache_Solr_Service::escape()</a> in Service.php</div>
+							<div class="index-item-description">Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escapePhrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodescapePhrase">Apache_Solr_Service_Balancer::escapePhrase()</a> in Balancer.php</div>
+							<div class="index-item-description">Escape a value meant to be contained in a phrase for special query characters</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escapePhrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodescapePhrase">Apache_Solr_Service::escapePhrase()</a> in Service.php</div>
+							<div class="index-item-description">Escape a value meant to be contained in a phrase for special query characters</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Exception.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Exception.php.html">Exception.php</a> in Exception.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extract</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodextract">Apache_Solr_Service_Balancer::extract()</a> in Balancer.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extract</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextract">Apache_Solr_Service::extract()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodextractFromString">Apache_Solr_Service_Balancer::extractFromString()</a> in Balancer.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextractFromString">Apache_Solr_Service::extractFromString()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextractFromUrl">Apache_Solr_Service::extractFromUrl()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						EXTRACT_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constEXTRACT_SERVLET">Apache_Solr_Service::EXTRACT_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="f"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">f</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">FileGetContents.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---FileGetContents.php.html">FileGetContents.php</a> in FileGetContents.php</div>
+					</dd>
+		</dl>
+	<a name="g"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">g</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">getBody</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetBody">Apache_Solr_HttpTransport_Response::getBody()</a> in Response.php</div>
+							<div class="index-item-description">Get the raw response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetBoost">Apache_Solr_Document::getBoost()</a> in Document.php</div>
+							<div class="index-item-description">Get current document boost</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCollapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetCollapseSingleValueArrays">Apache_Solr_Service::getCollapseSingleValueArrays()</a> in Service.php</div>
+							<div class="index-item-description">Get the current state of the collapse single value arrays flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodgetCreateDocuments">Apache_Solr_Service_Balancer::getCreateDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Get the current state of teh create documents flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetCreateDocuments">Apache_Solr_Service::getCreateDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Get the current state of teh create documents flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetDefaultStatusMessage">Apache_Solr_HttpTransport_Response::getDefaultStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status message based on status code</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::getDefaultTimeout()</a> in Abstract.php</div>
+							<div class="index-item-description">Get the current default timeout setting (initially the default_socket_timeout ini setting)  in seconds</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Interface::getDefaultTimeout()</a> in Interface.php</div>
+							<div class="index-item-description">Get the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetDefaultTimeout">Apache_Solr_Service::getDefaultTimeout()</a> in Service.php</div>
+							<div class="index-item-description">Get the current default timeout setting (initially the default_socket_timeout ini setting)  in seconds</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getEncoding</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetEncoding">Apache_Solr_HttpTransport_Response::getEncoding()</a> in Response.php</div>
+							<div class="index-item-description">Get the charset encoding of the response body.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getEncoding</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetEncoding">Apache_Solr_Response::getEncoding()</a> in Response.php</div>
+							<div class="index-item-description">Get character encoding of this response. Should usually be utf-8, but just in case</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetField">Apache_Solr_Document::getField()</a> in Document.php</div>
+							<div class="index-item-description">Get field information</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldBoost">Apache_Solr_Document::getFieldBoost()</a> in Document.php</div>
+							<div class="index-item-description">Get the currently set field boost for a document field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldBoosts</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldBoosts">Apache_Solr_Document::getFieldBoosts()</a> in Document.php</div>
+							<div class="index-item-description">Return current field boosts, indexed by field name</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldNames</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldNames">Apache_Solr_Document::getFieldNames()</a> in Document.php</div>
+							<div class="index-item-description">Get the names of all fields in this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldValues</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldValues">Apache_Solr_Document::getFieldValues()</a> in Document.php</div>
+							<div class="index-item-description">Get the values of all fields in this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetHost">Apache_Solr_Service::getHost()</a> in Service.php</div>
+							<div class="index-item-description">Returns the set host</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpStatus</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetHttpStatus">Apache_Solr_Response::getHttpStatus()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status code</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetHttpStatusMessage">Apache_Solr_Response::getHttpStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status message of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetHttpTransport">Apache_Solr_Service::getHttpTransport()</a> in Service.php</div>
+							<div class="index-item-description">Get the current configured HTTP Transport</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getIterator</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetIterator">Apache_Solr_Document::getIterator()</a> in Document.php</div>
+							<div class="index-item-description">IteratorAggregate implementation function. Allows usage:</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getMimeType</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetMimeType">Apache_Solr_HttpTransport_Response::getMimeType()</a> in Response.php</div>
+							<div class="index-item-description">Get the mimetype of the response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getNamedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetNamedListTreatment">Apache_Solr_Service::getNamedListTreatment()</a> in Service.php</div>
+							<div class="index-item-description">Get the current setting for named list treatment.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getPath</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetPath">Apache_Solr_Service::getPath()</a> in Service.php</div>
+							<div class="index-item-description">Get the set path.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getPort</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetPort">Apache_Solr_Service::getPort()</a> in Service.php</div>
+							<div class="index-item-description">Get the set port</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getRawResponse</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetRawResponse">Apache_Solr_Response::getRawResponse()</a> in Response.php</div>
+							<div class="index-item-description">Get the raw response as it was given to this object</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getResponse</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#methodgetResponse">Apache_Solr_HttpTransportException::getResponse()</a> in HttpTransportException.php</div>
+							<div class="index-item-description">Get the response for which this exception was generated</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getStatusCode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetStatusCode">Apache_Solr_HttpTransport_Response::getStatusCode()</a> in Response.php</div>
+							<div class="index-item-description">Get the status code of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetStatusMessage">Apache_Solr_HttpTransport_Response::getStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the status message of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getType</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetType">Apache_Solr_Response::getType()</a> in Response.php</div>
+							<div class="index-item-description">Get content type of this Solr response</div>
+					</dd>
+		</dl>
+	<a name="h"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">h</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">HttpTransportException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransportException.php.html">HttpTransportException.php</a> in HttpTransportException.php</div>
+					</dd>
+		</dl>
+	<a name="i"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">i</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Interface.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Interface.php.html">Interface.php</a> in Interface.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">InvalidArgumentException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_InvalidArgumentException.php.html">InvalidArgumentException.php</a> in InvalidArgumentException.php</div>
+					</dd>
+		</dl>
+	<a name="m"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">m</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						METHOD_GET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constMETHOD_GET">Apache_Solr_Service::METHOD_GET</a> in Service.php</div>
+							<div class="index-item-description">Search HTTP Methods</div>
+					</dd>
+			<dt class="field">
+						METHOD_POST
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constMETHOD_POST">Apache_Solr_Service::METHOD_POST</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="n"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">n</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						NAMED_LIST_FLAT
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_FLAT">Apache_Solr_Service::NAMED_LIST_FLAT</a> in Service.php</div>
+							<div class="index-item-description">NamedList Treatment constants</div>
+					</dd>
+			<dt class="field">
+						NAMED_LIST_MAP
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_MAP">Apache_Solr_Service::NAMED_LIST_MAP</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">NoServiceAvailableException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_NoServiceAvailableException.php.html">NoServiceAvailableException.php</a> in NoServiceAvailableException.php</div>
+					</dd>
+		</dl>
+	<a name="o"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">o</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">optimize</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodoptimize">Apache_Solr_Service::optimize()</a> in Service.php</div>
+							<div class="index-item-description">Send an optimize command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">optimize</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodoptimize">Apache_Solr_Service_Balancer::optimize()</a> in Balancer.php</div>
+							<div class="index-item-description">Send an optimize command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+		</dl>
+	<a name="p"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">p</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">ParserException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_ParserException.php.html">ParserException.php</a> in ParserException.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformGetRequest">Apache_Solr_HttpTransport_CurlNoReuse::performGetRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformGetRequest">Apache_Solr_HttpTransport_Curl::performGetRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformGetRequest">Apache_Solr_HttpTransport_FileGetContents::performGetRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformGetRequest">Apache_Solr_HttpTransport_Interface::performGetRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a GET HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformHeadRequest">Apache_Solr_HttpTransport_Interface::performHeadRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a HEAD HTTP operation with an optional timeout and return the response  headers - NOTE: head requests have no response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformHeadRequest">Apache_Solr_HttpTransport_FileGetContents::performHeadRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformHeadRequest">Apache_Solr_HttpTransport_CurlNoReuse::performHeadRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformHeadRequest">Apache_Solr_HttpTransport_Curl::performHeadRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformPostRequest">Apache_Solr_HttpTransport_CurlNoReuse::performPostRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformPostRequest">Apache_Solr_HttpTransport_Interface::performPostRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a POST HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformPostRequest">Apache_Solr_HttpTransport_Curl::performPostRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformPostRequest">Apache_Solr_HttpTransport_FileGetContents::performPostRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">phrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodphrase">Apache_Solr_Service::phrase()</a> in Service.php</div>
+							<div class="index-item-description">Convenience function for creating phrase syntax from a value</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">phrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodphrase">Apache_Solr_Service_Balancer::phrase()</a> in Balancer.php</div>
+							<div class="index-item-description">Convenience function for creating phrase syntax from a value</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">ping</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodping">Apache_Solr_Service::ping()</a> in Service.php</div>
+							<div class="index-item-description">Call the /admin/ping servlet, can be used to quickly tell if a connection to the  server is able to be made.</div>
+					</dd>
+			<dt class="field">
+						PING_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constPING_SERVLET">Apache_Solr_Service::PING_SERVLET</a> in Service.php</div>
+							<div class="index-item-description">Servlet mappings</div>
+					</dd>
+		</dl>
+	<a name="r"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">r</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Response.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Response.php.html">Response.php</a> in Response.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">removeReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodremoveReadService">Apache_Solr_Service_Balancer::removeReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Removes a service instance or descriptor from the available services</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">removeWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodremoveWriteService">Apache_Solr_Service_Balancer::removeWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Removes a service instance or descriptor from the available services</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Response.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Response.php.html">Response.php</a> in Response.php</div>
+					</dd>
+		</dl>
+	<a name="s"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">s</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">search</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsearch">Apache_Solr_Service::search()</a> in Service.php</div>
+							<div class="index-item-description">Simple Search interface</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">search</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsearch">Apache_Solr_Service_Balancer::search()</a> in Balancer.php</div>
+							<div class="index-item-description">Simple Search interface</div>
+					</dd>
+			<dt class="field">
+						SEARCH_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSEARCH_SERVLET">Apache_Solr_Service::SEARCH_SERVLET</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Service.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Service.php.html">Service.php</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetBoost">Apache_Solr_Document::setBoost()</a> in Document.php</div>
+							<div class="index-item-description">Set document boost factor</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCollapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetCollapseSingleValueArrays">Apache_Solr_Service::setCollapseSingleValueArrays()</a> in Service.php</div>
+							<div class="index-item-description">Set the collapse single value arrays flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetCreateDocuments">Apache_Solr_Service::setCreateDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Set the create documents flag. This determines whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects will  parse the response and create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instances in place.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetCreateDocuments">Apache_Solr_Service_Balancer::setCreateDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Set the create documents flag. This determines whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects will  parse the response and create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instances in place.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::setDefaultTimeout()</a> in Abstract.php</div>
+							<div class="index-item-description">Set the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetDefaultTimeout">Apache_Solr_Service::setDefaultTimeout()</a> in Service.php</div>
+							<div class="index-item-description">Set the default timeout for all calls that aren't passed a specific timeout</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Interface::setDefaultTimeout()</a> in Interface.php</div>
+							<div class="index-item-description">Set the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetField">Apache_Solr_Document::setField()</a> in Document.php</div>
+							<div class="index-item-description">Set a field value. Multi-valued fields should be set as arrays  or instead use the addField(...) function which will automatically  make sure the field is an array.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setFieldBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetFieldBoost">Apache_Solr_Document::setFieldBoost()</a> in Document.php</div>
+							<div class="index-item-description">Set the field boost for a document field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setHost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetHost">Apache_Solr_Service::setHost()</a> in Service.php</div>
+							<div class="index-item-description">Set the host used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setHttpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetHttpTransport">Apache_Solr_Service::setHttpTransport()</a> in Service.php</div>
+							<div class="index-item-description">Set the HTTP Transport implemenation that will be used for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setMultiValue</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetMultiValue">Apache_Solr_Document::setMultiValue()</a> in Document.php</div>
+							<div class="index-item-description">Handle the array manipulation for a multi-valued field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setNamedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetNamedListTreatment">Apache_Solr_Service::setNamedListTreatment()</a> in Service.php</div>
+							<div class="index-item-description">Set how NamedLists should be formatted in the response data. This mainly effects  the facet counts format.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setPath</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetPath">Apache_Solr_Service::setPath()</a> in Service.php</div>
+							<div class="index-item-description">Set the path used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setPort</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetPort">Apache_Solr_Service::setPort()</a> in Service.php</div>
+							<div class="index-item-description">Set the port used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setQueryDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetQueryDelimiter">Apache_Solr_Service::setQueryDelimiter()</a> in Service.php</div>
+							<div class="index-item-description">Set the string used to separate the path form the query string.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setQueryStringDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetQueryStringDelimiter">Apache_Solr_Service::setQueryStringDelimiter()</a> in Service.php</div>
+							<div class="index-item-description">Set the string used to separate the parameters in thequery string  Defaulted to '&amp;'</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setReadPingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetReadPingTimeout">Apache_Solr_Service_Balancer::setReadPingTimeout()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUseBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetUseBackoff">Apache_Solr_Service_Balancer::setUseBackoff()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setWritePingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetWritePingTimeout">Apache_Solr_Service_Balancer::setWritePingTimeout()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						SOLR_WRITER
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSOLR_WRITER">Apache_Solr_Service::SOLR_WRITER</a> in Service.php</div>
+							<div class="index-item-description">Response writer we'll request - JSON. See http://code.google.com/p/solr-php-client/issues/detail?id=6#c1 for reasoning</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#constSVN_ID">Apache_Solr_Service_Balancer::SVN_ID</a> in Balancer.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#constSVN_ID">Apache_Solr_HttpTransport_Curl::SVN_ID</a> in Curl.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSVN_ID">Apache_Solr_Service::SVN_ID</a> in Service.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#constSVN_ID">Apache_Solr_Response::SVN_ID</a> in Response.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html#constSVN_ID">Apache_Solr_ParserException::SVN_ID</a> in ParserException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_ID">Apache_Solr_InvalidArgumentException::SVN_ID</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#constSVN_ID">Apache_Solr_HttpTransport_FileGetContents::SVN_ID</a> in FileGetContents.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#constSVN_ID">Apache_Solr_HttpTransportException::SVN_ID</a> in HttpTransportException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html#constSVN_ID">Apache_Solr_Exception::SVN_ID</a> in Exception.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_ID">Apache_Solr_NoServiceAvailableException::SVN_ID</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#constSVN_ID">Apache_Solr_HttpTransport_CurlNoReuse::SVN_ID</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#constSVN_ID">Apache_Solr_Document::SVN_ID</a> in Document.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSVN_REVISION">Apache_Solr_Service::SVN_REVISION</a> in Service.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#constSVN_REVISION">Apache_Solr_Document::SVN_REVISION</a> in Document.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html#constSVN_REVISION">Apache_Solr_Exception::SVN_REVISION</a> in Exception.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#constSVN_REVISION">Apache_Solr_HttpTransport_FileGetContents::SVN_REVISION</a> in FileGetContents.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#constSVN_REVISION">Apache_Solr_HttpTransportException::SVN_REVISION</a> in HttpTransportException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#constSVN_REVISION">Apache_Solr_Response::SVN_REVISION</a> in Response.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#constSVN_REVISION">Apache_Solr_HttpTransport_CurlNoReuse::SVN_REVISION</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_REVISION">Apache_Solr_NoServiceAvailableException::SVN_REVISION</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#constSVN_REVISION">Apache_Solr_Service_Balancer::SVN_REVISION</a> in Balancer.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#constSVN_REVISION">Apache_Solr_HttpTransport_Curl::SVN_REVISION</a> in Curl.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_REVISION">Apache_Solr_InvalidArgumentException::SVN_REVISION</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html#constSVN_REVISION">Apache_Solr_ParserException::SVN_REVISION</a> in ParserException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+		</dl>
+	<a name="t"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">t</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">threads</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodthreads">Apache_Solr_Service::threads()</a> in Service.php</div>
+							<div class="index-item-description">Call the /admin/threads servlet and retrieve information about all threads in the  Solr servlet's thread group. Useful for diagnostics.</div>
+					</dd>
+			<dt class="field">
+						THREADS_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constTHREADS_SERVLET">Apache_Solr_Service::THREADS_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="u"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">u</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						UPDATE_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constUPDATE_SERVLET">Apache_Solr_Service::UPDATE_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="_"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">_</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="var-title">$_backoffEscalation</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_backoffEscalation">Apache_Solr_Service_Balancer::$_backoffEscalation</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_backoffLimit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_backoffLimit">Apache_Solr_Service_Balancer::$_backoffLimit</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_collapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_collapseSingleValueArrays">Apache_Solr_Service::$_collapseSingleValueArrays</a> in Service.php</div>
+							<div class="index-item-description">Whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects should have multivalue fields with only a single value  collapsed to appear as a single value would.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_collapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_collapseSingleValueArrays">Apache_Solr_Response::$_collapseSingleValueArrays</a> in Response.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_createDocuments">Apache_Solr_Response::$_createDocuments</a> in Response.php</div>
+							<div class="index-item-description">Data parsing flags.  Determines what extra processing should be done  after the data is initially converted to a data structure.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_createDocuments">Apache_Solr_Service::$_createDocuments</a> in Service.php</div>
+							<div class="index-item-description">Whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects should create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a>s in  the returned parsed data</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_createDocuments">Apache_Solr_Service_Balancer::$_createDocuments</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_currentReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_currentReadService">Apache_Solr_Service_Balancer::$_currentReadService</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_currentWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_currentWriteService">Apache_Solr_Service_Balancer::$_currentWriteService</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_defaultBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_defaultBackoff">Apache_Solr_Service_Balancer::$_defaultBackoff</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_documentBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_documentBoost">Apache_Solr_Document::$_documentBoost</a> in Document.php</div>
+							<div class="index-item-description">Document boost value</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_fieldBoosts</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_fieldBoosts">Apache_Solr_Document::$_fieldBoosts</a> in Document.php</div>
+							<div class="index-item-description">Document field boost values, indexed by name</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_fields</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_fields">Apache_Solr_Document::$_fields</a> in Document.php</div>
+							<div class="index-item-description">Document field values, indexed by name</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_host</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_host">Apache_Solr_Service::$_host</a> in Service.php</div>
+							<div class="index-item-description">Server identification strings</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_httpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_httpTransport">Apache_Solr_Service::$_httpTransport</a> in Service.php</div>
+							<div class="index-item-description">HTTP Transport implementation (pluggable)</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_isParsed</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_isParsed">Apache_Solr_Response::$_isParsed</a> in Response.php</div>
+							<div class="index-item-description">Whether the raw response has been parsed</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_namedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_namedListTreatment">Apache_Solr_Service::$_namedListTreatment</a> in Service.php</div>
+							<div class="index-item-description">How NamedLists should be formatted in the output.  This specifically effects facet counts. Valid values  are <a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_MAP">Apache_Solr_Service::NAMED_LIST_MAP</a> (default) or <a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_FLAT">Apache_Solr_Service::NAMED_LIST_FLAT</a>.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_parsedData</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_parsedData">Apache_Solr_Response::$_parsedData</a> in Response.php</div>
+							<div class="index-item-description">Parsed representation of the data</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_path</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_path">Apache_Solr_Service::$_path</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_pingUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_pingUrl">Apache_Solr_Service::$_pingUrl</a> in Service.php</div>
+							<div class="index-item-description">Constructed servlet full path URLs</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_port</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_port">Apache_Solr_Service::$_port</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryBracketsEscaped</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryBracketsEscaped">Apache_Solr_Service::$_queryBracketsEscaped</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryDelimiter">Apache_Solr_Service::$_queryDelimiter</a> in Service.php</div>
+							<div class="index-item-description">Query delimiters. Someone might want to be able to change  these (to use &amp;amp; instead of &amp; for example), so I've provided them.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryStringDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryStringDelimiter">Apache_Solr_Service::$_queryStringDelimiter</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_readableServices</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_readableServices">Apache_Solr_Service_Balancer::$_readableServices</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_readPingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_readPingTimeout">Apache_Solr_Service_Balancer::$_readPingTimeout</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_response</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_response">Apache_Solr_Response::$_response</a> in Response.php</div>
+							<div class="index-item-description">Holds the raw response used in construction</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_searchUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_searchUrl">Apache_Solr_Service::$_searchUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_threadsUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_threadsUrl">Apache_Solr_Service::$_threadsUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_updateUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_updateUrl">Apache_Solr_Service::$_updateUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_urlsInited</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_urlsInited">Apache_Solr_Service::$_urlsInited</a> in Service.php</div>
+							<div class="index-item-description">Keep track of whether our URLs have been constructed</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_useBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_useBackoff">Apache_Solr_Service_Balancer::$_useBackoff</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_writeableServices</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_writeableServices">Apache_Solr_Service_Balancer::$_writeableServices</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_writePingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_writePingTimeout">Apache_Solr_Service_Balancer::$_writePingTimeout</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_constructUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_constructUrl">Apache_Solr_Service::_constructUrl()</a> in Service.php</div>
+							<div class="index-item-description">Return a valid http URL given this server's host, port and path and a provided servlet name</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_documentToXmlFragment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_documentToXmlFragment">Apache_Solr_Service::_documentToXmlFragment()</a> in Service.php</div>
+							<div class="index-item-description">Create an XML fragment from a <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instance appropriate for use inside a Solr add call</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_generateQueryString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_generateQueryString">Apache_Solr_Service::_generateQueryString()</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_getServiceId</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_getServiceId">Apache_Solr_Service_Balancer::_getServiceId()</a> in Balancer.php</div>
+							<div class="index-item-description">Generates a service ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_initUrls</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_initUrls">Apache_Solr_Service::_initUrls()</a> in Service.php</div>
+							<div class="index-item-description">Construct the Full URLs for the three servlets we reference</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_parseData</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method_parseData">Apache_Solr_Response::_parseData()</a> in Response.php</div>
+							<div class="index-item-description">Parse the raw response into the parsed_data array for access</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectReadService">Apache_Solr_Service_Balancer::_selectReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available read services and select the first with a ping  that satisfies configured timeout restrictions (or the default)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectWriteService">Apache_Solr_Service_Balancer::_selectWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available write services and select the first with a ping  that satisfies configured timeout restrictions (or the default)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectWriteServiceSafe</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectWriteServiceSafe">Apache_Solr_Service_Balancer::_selectWriteServiceSafe()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available write services and select the first with a ping</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_sendRawGet</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_sendRawGet">Apache_Solr_Service::_sendRawGet()</a> in Service.php</div>
+							<div class="index-item-description">Central method for making a get operation against this Solr Server</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_sendRawPost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_sendRawPost">Apache_Solr_Service::_sendRawPost()</a> in Service.php</div>
+							<div class="index-item-description">Central method for making a post operation against this Solr Server</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_stripCtrlChars</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_stripCtrlChars">Apache_Solr_Service::_stripCtrlChars()</a> in Service.php</div>
+							<div class="index-item-description">Replace control (non-printable) characters from string that are invalid to Solr's XML parser with a space.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method__construct">Apache_Solr_Service::__construct()</a> in Service.php</div>
+							<div class="index-item-description">Constructor. All parameters are optional and will take on default values  if not specified.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#method__construct">Apache_Solr_HttpTransport_Response::__construct()</a> in Response.php</div>
+							<div class="index-item-description">Construct a HTTP transport response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#method__construct">Apache_Solr_HttpTransport_FileGetContents::__construct()</a> in FileGetContents.php</div>
+							<div class="index-item-description">Initializes our reuseable get and post stream contexts</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#method__construct">Apache_Solr_HttpTransport_Curl::__construct()</a> in Curl.php</div>
+							<div class="index-item-description">Initializes a curl session</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#method__construct">Apache_Solr_HttpTransportException::__construct()</a> in HttpTransportException.php</div>
+							<div class="index-item-description">HttpTransportException Constructor</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__construct">Apache_Solr_Response::__construct()</a> in Response.php</div>
+							<div class="index-item-description">Constructor. Takes the raw HTTP response body and the exploded HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method__construct">Apache_Solr_Service_Balancer::__construct()</a> in Balancer.php</div>
+							<div class="index-item-description">Constructor. Takes arrays of read and write service instances or descriptions</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__destruct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#method__destruct">Apache_Solr_HttpTransport_Curl::__destruct()</a> in Curl.php</div>
+							<div class="index-item-description">Closes a curl session</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__get</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__get">Apache_Solr_Response::__get()</a> in Response.php</div>
+							<div class="index-item-description">Magic get to expose the parsed data and to lazily load it</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__get</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__get">Apache_Solr_Document::__get()</a> in Document.php</div>
+							<div class="index-item-description">Magic get for field values</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__isset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__isset">Apache_Solr_Document::__isset()</a> in Document.php</div>
+							<div class="index-item-description">Magic isset for fields values.  Do not call directly. Allows usage:</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__isset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__isset">Apache_Solr_Response::__isset()</a> in Response.php</div>
+							<div class="index-item-description">Magic function for isset function on parsed data</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__set</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__set">Apache_Solr_Document::__set()</a> in Document.php</div>
+							<div class="index-item-description">Magic set for field values. Multi-valued fields should be set as arrays  or instead use the addField(...) function which will automatically  make sure the field is an array.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__unset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__unset">Apache_Solr_Document::__unset()</a> in Document.php</div>
+							<div class="index-item-description">Magic unset for field values. Do not call directly. Allows usage:</div>
+					</dd>
+		</dl>
+
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex.html#a">a</a>
+	<a class="index-letter" href="elementindex.html#b">b</a>
+	<a class="index-letter" href="elementindex.html#c">c</a>
+	<a class="index-letter" href="elementindex.html#d">d</a>
+	<a class="index-letter" href="elementindex.html#e">e</a>
+	<a class="index-letter" href="elementindex.html#f">f</a>
+	<a class="index-letter" href="elementindex.html#g">g</a>
+	<a class="index-letter" href="elementindex.html#h">h</a>
+	<a class="index-letter" href="elementindex.html#i">i</a>
+	<a class="index-letter" href="elementindex.html#m">m</a>
+	<a class="index-letter" href="elementindex.html#n">n</a>
+	<a class="index-letter" href="elementindex.html#o">o</a>
+	<a class="index-letter" href="elementindex.html#p">p</a>
+	<a class="index-letter" href="elementindex.html#r">r</a>
+	<a class="index-letter" href="elementindex.html#s">s</a>
+	<a class="index-letter" href="elementindex.html#t">t</a>
+	<a class="index-letter" href="elementindex.html#u">u</a>
+	<a class="index-letter" href="elementindex.html#_">_</a>
+</div>	</body>
+</html>

+ 1723 - 0
SolrPhpClient/phpdocs/elementindex_Apache.html

@@ -0,0 +1,1723 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a name="top"></a>
+<h2>[Apache] element index</h2>
+<a href="elementindex.html">All elements</a>
+<br />
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex_Apache.html#a">a</a>
+	<a class="index-letter" href="elementindex_Apache.html#b">b</a>
+	<a class="index-letter" href="elementindex_Apache.html#c">c</a>
+	<a class="index-letter" href="elementindex_Apache.html#d">d</a>
+	<a class="index-letter" href="elementindex_Apache.html#e">e</a>
+	<a class="index-letter" href="elementindex_Apache.html#f">f</a>
+	<a class="index-letter" href="elementindex_Apache.html#g">g</a>
+	<a class="index-letter" href="elementindex_Apache.html#h">h</a>
+	<a class="index-letter" href="elementindex_Apache.html#i">i</a>
+	<a class="index-letter" href="elementindex_Apache.html#m">m</a>
+	<a class="index-letter" href="elementindex_Apache.html#n">n</a>
+	<a class="index-letter" href="elementindex_Apache.html#o">o</a>
+	<a class="index-letter" href="elementindex_Apache.html#p">p</a>
+	<a class="index-letter" href="elementindex_Apache.html#r">r</a>
+	<a class="index-letter" href="elementindex_Apache.html#s">s</a>
+	<a class="index-letter" href="elementindex_Apache.html#t">t</a>
+	<a class="index-letter" href="elementindex_Apache.html#u">u</a>
+	<a class="index-letter" href="elementindex_Apache.html#_">_</a>
+</div>
+
+	<a name="_"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">_</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="var-title">$_backoffEscalation</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_backoffEscalation">Apache_Solr_Service_Balancer::$_backoffEscalation</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_backoffLimit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_backoffLimit">Apache_Solr_Service_Balancer::$_backoffLimit</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_collapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_collapseSingleValueArrays">Apache_Solr_Service::$_collapseSingleValueArrays</a> in Service.php</div>
+							<div class="index-item-description">Whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects should have multivalue fields with only a single value  collapsed to appear as a single value would.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_collapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_collapseSingleValueArrays">Apache_Solr_Response::$_collapseSingleValueArrays</a> in Response.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_createDocuments">Apache_Solr_Response::$_createDocuments</a> in Response.php</div>
+							<div class="index-item-description">Data parsing flags.  Determines what extra processing should be done  after the data is initially converted to a data structure.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_createDocuments">Apache_Solr_Service::$_createDocuments</a> in Service.php</div>
+							<div class="index-item-description">Whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects should create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a>s in  the returned parsed data</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_createDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_createDocuments">Apache_Solr_Service_Balancer::$_createDocuments</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_currentReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_currentReadService">Apache_Solr_Service_Balancer::$_currentReadService</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_currentWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_currentWriteService">Apache_Solr_Service_Balancer::$_currentWriteService</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_defaultBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_defaultBackoff">Apache_Solr_Service_Balancer::$_defaultBackoff</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_documentBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_documentBoost">Apache_Solr_Document::$_documentBoost</a> in Document.php</div>
+							<div class="index-item-description">Document boost value</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_fieldBoosts</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_fieldBoosts">Apache_Solr_Document::$_fieldBoosts</a> in Document.php</div>
+							<div class="index-item-description">Document field boost values, indexed by name</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_fields</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#var$_fields">Apache_Solr_Document::$_fields</a> in Document.php</div>
+							<div class="index-item-description">Document field values, indexed by name</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_host</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_host">Apache_Solr_Service::$_host</a> in Service.php</div>
+							<div class="index-item-description">Server identification strings</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_httpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_httpTransport">Apache_Solr_Service::$_httpTransport</a> in Service.php</div>
+							<div class="index-item-description">HTTP Transport implementation (pluggable)</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_isParsed</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_isParsed">Apache_Solr_Response::$_isParsed</a> in Response.php</div>
+							<div class="index-item-description">Whether the raw response has been parsed</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_namedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_namedListTreatment">Apache_Solr_Service::$_namedListTreatment</a> in Service.php</div>
+							<div class="index-item-description">How NamedLists should be formatted in the output.  This specifically effects facet counts. Valid values  are <a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_MAP">Apache_Solr_Service::NAMED_LIST_MAP</a> (default) or <a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_FLAT">Apache_Solr_Service::NAMED_LIST_FLAT</a>.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_parsedData</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_parsedData">Apache_Solr_Response::$_parsedData</a> in Response.php</div>
+							<div class="index-item-description">Parsed representation of the data</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_path</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_path">Apache_Solr_Service::$_path</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_pingUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_pingUrl">Apache_Solr_Service::$_pingUrl</a> in Service.php</div>
+							<div class="index-item-description">Constructed servlet full path URLs</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_port</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_port">Apache_Solr_Service::$_port</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryBracketsEscaped</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryBracketsEscaped">Apache_Solr_Service::$_queryBracketsEscaped</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryDelimiter">Apache_Solr_Service::$_queryDelimiter</a> in Service.php</div>
+							<div class="index-item-description">Query delimiters. Someone might want to be able to change  these (to use &amp;amp; instead of &amp; for example), so I've provided them.</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_queryStringDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_queryStringDelimiter">Apache_Solr_Service::$_queryStringDelimiter</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_readableServices</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_readableServices">Apache_Solr_Service_Balancer::$_readableServices</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_readPingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_readPingTimeout">Apache_Solr_Service_Balancer::$_readPingTimeout</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_response</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#var$_response">Apache_Solr_Response::$_response</a> in Response.php</div>
+							<div class="index-item-description">Holds the raw response used in construction</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_searchUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_searchUrl">Apache_Solr_Service::$_searchUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_threadsUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_threadsUrl">Apache_Solr_Service::$_threadsUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_updateUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_updateUrl">Apache_Solr_Service::$_updateUrl</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_urlsInited</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#var$_urlsInited">Apache_Solr_Service::$_urlsInited</a> in Service.php</div>
+							<div class="index-item-description">Keep track of whether our URLs have been constructed</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_useBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_useBackoff">Apache_Solr_Service_Balancer::$_useBackoff</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_writeableServices</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_writeableServices">Apache_Solr_Service_Balancer::$_writeableServices</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="var-title">$_writePingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#var$_writePingTimeout">Apache_Solr_Service_Balancer::$_writePingTimeout</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_constructUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_constructUrl">Apache_Solr_Service::_constructUrl()</a> in Service.php</div>
+							<div class="index-item-description">Return a valid http URL given this server's host, port and path and a provided servlet name</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_documentToXmlFragment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_documentToXmlFragment">Apache_Solr_Service::_documentToXmlFragment()</a> in Service.php</div>
+							<div class="index-item-description">Create an XML fragment from a <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instance appropriate for use inside a Solr add call</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_generateQueryString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_generateQueryString">Apache_Solr_Service::_generateQueryString()</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_getServiceId</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_getServiceId">Apache_Solr_Service_Balancer::_getServiceId()</a> in Balancer.php</div>
+							<div class="index-item-description">Generates a service ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_initUrls</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_initUrls">Apache_Solr_Service::_initUrls()</a> in Service.php</div>
+							<div class="index-item-description">Construct the Full URLs for the three servlets we reference</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_parseData</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method_parseData">Apache_Solr_Response::_parseData()</a> in Response.php</div>
+							<div class="index-item-description">Parse the raw response into the parsed_data array for access</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectReadService">Apache_Solr_Service_Balancer::_selectReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available read services and select the first with a ping  that satisfies configured timeout restrictions (or the default)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectWriteService">Apache_Solr_Service_Balancer::_selectWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available write services and select the first with a ping  that satisfies configured timeout restrictions (or the default)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_selectWriteServiceSafe</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method_selectWriteServiceSafe">Apache_Solr_Service_Balancer::_selectWriteServiceSafe()</a> in Balancer.php</div>
+							<div class="index-item-description">Iterate through available write services and select the first with a ping</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_sendRawGet</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_sendRawGet">Apache_Solr_Service::_sendRawGet()</a> in Service.php</div>
+							<div class="index-item-description">Central method for making a get operation against this Solr Server</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_sendRawPost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_sendRawPost">Apache_Solr_Service::_sendRawPost()</a> in Service.php</div>
+							<div class="index-item-description">Central method for making a post operation against this Solr Server</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">_stripCtrlChars</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method_stripCtrlChars">Apache_Solr_Service::_stripCtrlChars()</a> in Service.php</div>
+							<div class="index-item-description">Replace control (non-printable) characters from string that are invalid to Solr's XML parser with a space.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#method__construct">Apache_Solr_Service::__construct()</a> in Service.php</div>
+							<div class="index-item-description">Constructor. All parameters are optional and will take on default values  if not specified.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#method__construct">Apache_Solr_HttpTransport_Response::__construct()</a> in Response.php</div>
+							<div class="index-item-description">Construct a HTTP transport response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#method__construct">Apache_Solr_HttpTransport_FileGetContents::__construct()</a> in FileGetContents.php</div>
+							<div class="index-item-description">Initializes our reuseable get and post stream contexts</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#method__construct">Apache_Solr_HttpTransport_Curl::__construct()</a> in Curl.php</div>
+							<div class="index-item-description">Initializes a curl session</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#method__construct">Apache_Solr_HttpTransportException::__construct()</a> in HttpTransportException.php</div>
+							<div class="index-item-description">HttpTransportException Constructor</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__construct">Apache_Solr_Response::__construct()</a> in Response.php</div>
+							<div class="index-item-description">Constructor. Takes the raw HTTP response body and the exploded HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__construct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#method__construct">Apache_Solr_Service_Balancer::__construct()</a> in Balancer.php</div>
+							<div class="index-item-description">Constructor. Takes arrays of read and write service instances or descriptions</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__destruct</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#method__destruct">Apache_Solr_HttpTransport_Curl::__destruct()</a> in Curl.php</div>
+							<div class="index-item-description">Closes a curl session</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__get</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__get">Apache_Solr_Response::__get()</a> in Response.php</div>
+							<div class="index-item-description">Magic get to expose the parsed data and to lazily load it</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__get</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__get">Apache_Solr_Document::__get()</a> in Document.php</div>
+							<div class="index-item-description">Magic get for field values</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__isset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__isset">Apache_Solr_Document::__isset()</a> in Document.php</div>
+							<div class="index-item-description">Magic isset for fields values.  Do not call directly. Allows usage:</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__isset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#method__isset">Apache_Solr_Response::__isset()</a> in Response.php</div>
+							<div class="index-item-description">Magic function for isset function on parsed data</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__set</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__set">Apache_Solr_Document::__set()</a> in Document.php</div>
+							<div class="index-item-description">Magic set for field values. Multi-valued fields should be set as arrays  or instead use the addField(...) function which will automatically  make sure the field is an array.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">__unset</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#method__unset">Apache_Solr_Document::__unset()</a> in Document.php</div>
+							<div class="index-item-description">Magic unset for field values. Do not call directly. Allows usage:</div>
+					</dd>
+		</dl>
+	<a name="a"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">a</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">add</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodadd">Apache_Solr_Service::add()</a> in Service.php</div>
+							<div class="index-item-description">Raw Add Method. Takes a raw post body and sends it to the update service.  Post body  should be a complete and well formed &quot;add&quot; xml document.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">add</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodadd">Apache_Solr_Service_Balancer::add()</a> in Balancer.php</div>
+							<div class="index-item-description">Raw Add Method. Takes a raw post body and sends it to the update service.  Post body  should be a complete and well formed &quot;add&quot; xml document.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocument</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddDocument">Apache_Solr_Service_Balancer::addDocument()</a> in Balancer.php</div>
+							<div class="index-item-description">Add a Solr Document to the index</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocument</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodaddDocument">Apache_Solr_Service::addDocument()</a> in Service.php</div>
+							<div class="index-item-description">Add a Solr Document to the index</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddDocuments">Apache_Solr_Service_Balancer::addDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Add an array of Solr Documents to the index all at once</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodaddDocuments">Apache_Solr_Service::addDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Add an array of Solr Documents to the index all at once</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodaddField">Apache_Solr_Document::addField()</a> in Document.php</div>
+							<div class="index-item-description">Add a value to a multi-valued field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddReadService">Apache_Solr_Service_Balancer::addReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Adds a service instance or service descriptor (if it is already  not added)</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">addWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodaddWriteService">Apache_Solr_Service_Balancer::addWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Adds a service instance or service descriptor (if it is already  not added)</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Document
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> in Document.php</div>
+							<div class="index-item-description">Holds Key / Value pairs that represent a Solr Document along with any associated boost  values. Field values can be accessed by direct dereferencing such as:</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Exception
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html">Apache_Solr_Exception</a> in Exception.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransportException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html">Apache_Solr_HttpTransportException</a> in HttpTransportException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Abstract
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html">Apache_Solr_HttpTransport_Abstract</a> in Abstract.php</div>
+							<div class="index-item-description">Convenience class that implements the transport implementation. Can be extended by</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Curl
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html">Apache_Solr_HttpTransport_Curl</a> in Curl.php</div>
+							<div class="index-item-description">A Curl based HTTP transport. Uses a single curl session for all requests.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_CurlNoReuse
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html">Apache_Solr_HttpTransport_CurlNoReuse</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">An alternative Curl HTTP transport that opens and closes a curl session for  every request. This isn't the recommended way to use curl, but some version of  PHP have memory issues.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_FileGetContents
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html">Apache_Solr_HttpTransport_FileGetContents</a> in FileGetContents.php</div>
+							<div class="index-item-description">HTTP Transport implemenation that uses the builtin http URL wrappers and file_get_contents</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Interface
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html">Apache_Solr_HttpTransport_Interface</a> in Interface.php</div>
+							<div class="index-item-description">Interface that all Transport (HTTP Requester) implementations must implement. These</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_HttpTransport_Response
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html">Apache_Solr_HttpTransport_Response</a> in Response.php</div>
+							<div class="index-item-description">Represents the required pieces of an HTTP response provided by HTTP transport</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_InvalidArgumentException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html">Apache_Solr_InvalidArgumentException</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_NoServiceAvailableException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html">Apache_Solr_NoServiceAvailableException</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_ParserException
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html">Apache_Solr_ParserException</a> in ParserException.php</div>
+							<div class="index-item-description">Copyright (c) 2007-2011, Servigistics, Inc.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Response
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> in Response.php</div>
+							<div class="index-item-description">Represents a Solr response.  Parses the raw response into a set of stdClass objects  and associative arrays for easy access.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Service
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html">Apache_Solr_Service</a> in Service.php</div>
+							<div class="index-item-description">Starting point for the Solr API. Represents a Solr server resource and has  methods for pinging, adding, deleting, committing, optimizing and searching.</div>
+					</dd>
+			<dt class="field">
+						Apache_Solr_Service_Balancer
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html">Apache_Solr_Service_Balancer</a> in Balancer.php</div>
+							<div class="index-item-description">Reference Implementation for using multiple Solr services in a distribution. Functionality</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Abstract.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Abstract.php.html">Abstract.php</a> in Abstract.php</div>
+					</dd>
+		</dl>
+	<a name="b"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">b</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Balancer.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Service---Balancer.php.html">Balancer.php</a> in Balancer.php</div>
+					</dd>
+		</dl>
+	<a name="c"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">c</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">clear</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodclear">Apache_Solr_Document::clear()</a> in Document.php</div>
+							<div class="index-item-description">Clear all boosts and fields from this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">commit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodcommit">Apache_Solr_Service_Balancer::commit()</a> in Balancer.php</div>
+							<div class="index-item-description">Send a commit command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">commit</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodcommit">Apache_Solr_Service::commit()</a> in Service.php</div>
+							<div class="index-item-description">Send a commit command.  Will be synchronous unless both wait parameters are set to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Curl.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Curl.php.html">Curl.php</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">CurlNoReuse.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---CurlNoReuse.php.html">CurlNoReuse.php</a> in CurlNoReuse.php</div>
+					</dd>
+		</dl>
+	<a name="d"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">d</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">delete</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddelete">Apache_Solr_Service_Balancer::delete()</a> in Balancer.php</div>
+							<div class="index-item-description">Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be  a complete and well formed &quot;delete&quot; xml document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">delete</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddelete">Apache_Solr_Service::delete()</a> in Service.php</div>
+							<div class="index-item-description">Raw Delete Method. Takes a raw post body and sends it to the update service. Body should be  a complete and well formed &quot;delete&quot; xml document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteById</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteById">Apache_Solr_Service_Balancer::deleteById()</a> in Balancer.php</div>
+							<div class="index-item-description">Create a delete document based on document ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteById</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteById">Apache_Solr_Service::deleteById()</a> in Service.php</div>
+							<div class="index-item-description">Create a delete document based on document ID</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByMultipleIds</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteByMultipleIds">Apache_Solr_Service_Balancer::deleteByMultipleIds()</a> in Balancer.php</div>
+							<div class="index-item-description">Create and post a delete document based on multiple document IDs.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByMultipleIds</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteByMultipleIds">Apache_Solr_Service::deleteByMultipleIds()</a> in Service.php</div>
+							<div class="index-item-description">Create and post a delete document based on multiple document IDs.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByQuery</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methoddeleteByQuery">Apache_Solr_Service_Balancer::deleteByQuery()</a> in Balancer.php</div>
+							<div class="index-item-description">Create a delete document based on a query and submit it</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">deleteByQuery</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methoddeleteByQuery">Apache_Solr_Service::deleteByQuery()</a> in Service.php</div>
+							<div class="index-item-description">Create a delete document based on a query and submit it</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Document.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Document.php.html">Document.php</a> in Document.php</div>
+					</dd>
+		</dl>
+	<a name="e"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">e</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">escape</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodescape">Apache_Solr_Service_Balancer::escape()</a> in Balancer.php</div>
+							<div class="index-item-description">Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escape</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodescape">Apache_Solr_Service::escape()</a> in Service.php</div>
+							<div class="index-item-description">Escape a value for special query characters such as ':', '(', ')', '*', '?', etc.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escapePhrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodescapePhrase">Apache_Solr_Service_Balancer::escapePhrase()</a> in Balancer.php</div>
+							<div class="index-item-description">Escape a value meant to be contained in a phrase for special query characters</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">escapePhrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodescapePhrase">Apache_Solr_Service::escapePhrase()</a> in Service.php</div>
+							<div class="index-item-description">Escape a value meant to be contained in a phrase for special query characters</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Exception.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Exception.php.html">Exception.php</a> in Exception.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extract</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodextract">Apache_Solr_Service_Balancer::extract()</a> in Balancer.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extract</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextract">Apache_Solr_Service::extract()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodextractFromString">Apache_Solr_Service_Balancer::extractFromString()</a> in Balancer.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromString</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextractFromString">Apache_Solr_Service::extractFromString()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">extractFromUrl</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodextractFromUrl">Apache_Solr_Service::extractFromUrl()</a> in Service.php</div>
+							<div class="index-item-description">Use Solr Cell to extract document contents. See <a href="http://wiki.apache.org/solr/ExtractingRequestHandler">http://wiki.apache.org/solr/ExtractingRequestHandler</a> for information on how  to use Solr Cell and what parameters are available.</div>
+					</dd>
+			<dt class="field">
+						EXTRACT_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constEXTRACT_SERVLET">Apache_Solr_Service::EXTRACT_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="f"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">f</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">FileGetContents.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---FileGetContents.php.html">FileGetContents.php</a> in FileGetContents.php</div>
+					</dd>
+		</dl>
+	<a name="g"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">g</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">getBody</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetBody">Apache_Solr_HttpTransport_Response::getBody()</a> in Response.php</div>
+							<div class="index-item-description">Get the raw response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetBoost">Apache_Solr_Document::getBoost()</a> in Document.php</div>
+							<div class="index-item-description">Get current document boost</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCollapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetCollapseSingleValueArrays">Apache_Solr_Service::getCollapseSingleValueArrays()</a> in Service.php</div>
+							<div class="index-item-description">Get the current state of the collapse single value arrays flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodgetCreateDocuments">Apache_Solr_Service_Balancer::getCreateDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Get the current state of teh create documents flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetCreateDocuments">Apache_Solr_Service::getCreateDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Get the current state of teh create documents flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetDefaultStatusMessage">Apache_Solr_HttpTransport_Response::getDefaultStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status message based on status code</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::getDefaultTimeout()</a> in Abstract.php</div>
+							<div class="index-item-description">Get the current default timeout setting (initially the default_socket_timeout ini setting)  in seconds</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodgetDefaultTimeout">Apache_Solr_HttpTransport_Interface::getDefaultTimeout()</a> in Interface.php</div>
+							<div class="index-item-description">Get the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetDefaultTimeout">Apache_Solr_Service::getDefaultTimeout()</a> in Service.php</div>
+							<div class="index-item-description">Get the current default timeout setting (initially the default_socket_timeout ini setting)  in seconds</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getEncoding</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetEncoding">Apache_Solr_HttpTransport_Response::getEncoding()</a> in Response.php</div>
+							<div class="index-item-description">Get the charset encoding of the response body.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getEncoding</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetEncoding">Apache_Solr_Response::getEncoding()</a> in Response.php</div>
+							<div class="index-item-description">Get character encoding of this response. Should usually be utf-8, but just in case</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetField">Apache_Solr_Document::getField()</a> in Document.php</div>
+							<div class="index-item-description">Get field information</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldBoost">Apache_Solr_Document::getFieldBoost()</a> in Document.php</div>
+							<div class="index-item-description">Get the currently set field boost for a document field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldBoosts</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldBoosts">Apache_Solr_Document::getFieldBoosts()</a> in Document.php</div>
+							<div class="index-item-description">Return current field boosts, indexed by field name</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldNames</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldNames">Apache_Solr_Document::getFieldNames()</a> in Document.php</div>
+							<div class="index-item-description">Get the names of all fields in this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getFieldValues</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetFieldValues">Apache_Solr_Document::getFieldValues()</a> in Document.php</div>
+							<div class="index-item-description">Get the values of all fields in this document</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetHost">Apache_Solr_Service::getHost()</a> in Service.php</div>
+							<div class="index-item-description">Returns the set host</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpStatus</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetHttpStatus">Apache_Solr_Response::getHttpStatus()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status code</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetHttpStatusMessage">Apache_Solr_Response::getHttpStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the HTTP status message of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getHttpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetHttpTransport">Apache_Solr_Service::getHttpTransport()</a> in Service.php</div>
+							<div class="index-item-description">Get the current configured HTTP Transport</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getIterator</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodgetIterator">Apache_Solr_Document::getIterator()</a> in Document.php</div>
+							<div class="index-item-description">IteratorAggregate implementation function. Allows usage:</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getMimeType</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetMimeType">Apache_Solr_HttpTransport_Response::getMimeType()</a> in Response.php</div>
+							<div class="index-item-description">Get the mimetype of the response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getNamedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetNamedListTreatment">Apache_Solr_Service::getNamedListTreatment()</a> in Service.php</div>
+							<div class="index-item-description">Get the current setting for named list treatment.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getPath</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetPath">Apache_Solr_Service::getPath()</a> in Service.php</div>
+							<div class="index-item-description">Get the set path.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getPort</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodgetPort">Apache_Solr_Service::getPort()</a> in Service.php</div>
+							<div class="index-item-description">Get the set port</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getRawResponse</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetRawResponse">Apache_Solr_Response::getRawResponse()</a> in Response.php</div>
+							<div class="index-item-description">Get the raw response as it was given to this object</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getResponse</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#methodgetResponse">Apache_Solr_HttpTransportException::getResponse()</a> in HttpTransportException.php</div>
+							<div class="index-item-description">Get the response for which this exception was generated</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getStatusCode</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetStatusCode">Apache_Solr_HttpTransport_Response::getStatusCode()</a> in Response.php</div>
+							<div class="index-item-description">Get the status code of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getStatusMessage</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Response.html#methodgetStatusMessage">Apache_Solr_HttpTransport_Response::getStatusMessage()</a> in Response.php</div>
+							<div class="index-item-description">Get the status message of the response</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">getType</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#methodgetType">Apache_Solr_Response::getType()</a> in Response.php</div>
+							<div class="index-item-description">Get content type of this Solr response</div>
+					</dd>
+		</dl>
+	<a name="h"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">h</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">HttpTransportException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransportException.php.html">HttpTransportException.php</a> in HttpTransportException.php</div>
+					</dd>
+		</dl>
+	<a name="i"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">i</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Interface.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Interface.php.html">Interface.php</a> in Interface.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">InvalidArgumentException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_InvalidArgumentException.php.html">InvalidArgumentException.php</a> in InvalidArgumentException.php</div>
+					</dd>
+		</dl>
+	<a name="m"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">m</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						METHOD_GET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constMETHOD_GET">Apache_Solr_Service::METHOD_GET</a> in Service.php</div>
+							<div class="index-item-description">Search HTTP Methods</div>
+					</dd>
+			<dt class="field">
+						METHOD_POST
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constMETHOD_POST">Apache_Solr_Service::METHOD_POST</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="n"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">n</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						NAMED_LIST_FLAT
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_FLAT">Apache_Solr_Service::NAMED_LIST_FLAT</a> in Service.php</div>
+							<div class="index-item-description">NamedList Treatment constants</div>
+					</dd>
+			<dt class="field">
+						NAMED_LIST_MAP
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constNAMED_LIST_MAP">Apache_Solr_Service::NAMED_LIST_MAP</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">NoServiceAvailableException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_NoServiceAvailableException.php.html">NoServiceAvailableException.php</a> in NoServiceAvailableException.php</div>
+					</dd>
+		</dl>
+	<a name="o"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">o</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">optimize</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodoptimize">Apache_Solr_Service::optimize()</a> in Service.php</div>
+							<div class="index-item-description">Send an optimize command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">optimize</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodoptimize">Apache_Solr_Service_Balancer::optimize()</a> in Balancer.php</div>
+							<div class="index-item-description">Send an optimize command.  Will be synchronous unless both wait parameters are set  to false.</div>
+					</dd>
+		</dl>
+	<a name="p"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">p</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">ParserException.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_ParserException.php.html">ParserException.php</a> in ParserException.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformGetRequest">Apache_Solr_HttpTransport_CurlNoReuse::performGetRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformGetRequest">Apache_Solr_HttpTransport_Curl::performGetRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformGetRequest">Apache_Solr_HttpTransport_FileGetContents::performGetRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performGetRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformGetRequest">Apache_Solr_HttpTransport_Interface::performGetRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a GET HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformHeadRequest">Apache_Solr_HttpTransport_Interface::performHeadRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a HEAD HTTP operation with an optional timeout and return the response  headers - NOTE: head requests have no response body</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformHeadRequest">Apache_Solr_HttpTransport_FileGetContents::performHeadRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformHeadRequest">Apache_Solr_HttpTransport_CurlNoReuse::performHeadRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performHeadRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformHeadRequest">Apache_Solr_HttpTransport_Curl::performHeadRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#methodperformPostRequest">Apache_Solr_HttpTransport_CurlNoReuse::performPostRequest()</a> in CurlNoReuse.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodperformPostRequest">Apache_Solr_HttpTransport_Interface::performPostRequest()</a> in Interface.php</div>
+							<div class="index-item-description">Perform a POST HTTP operation with an optional timeout and return the response  contents, use getLastResponseHeaders to retrieve HTTP headers</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#methodperformPostRequest">Apache_Solr_HttpTransport_Curl::performPostRequest()</a> in Curl.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">performPostRequest</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#methodperformPostRequest">Apache_Solr_HttpTransport_FileGetContents::performPostRequest()</a> in FileGetContents.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">phrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodphrase">Apache_Solr_Service::phrase()</a> in Service.php</div>
+							<div class="index-item-description">Convenience function for creating phrase syntax from a value</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">phrase</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodphrase">Apache_Solr_Service_Balancer::phrase()</a> in Balancer.php</div>
+							<div class="index-item-description">Convenience function for creating phrase syntax from a value</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">ping</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodping">Apache_Solr_Service::ping()</a> in Service.php</div>
+							<div class="index-item-description">Call the /admin/ping servlet, can be used to quickly tell if a connection to the  server is able to be made.</div>
+					</dd>
+			<dt class="field">
+						PING_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constPING_SERVLET">Apache_Solr_Service::PING_SERVLET</a> in Service.php</div>
+							<div class="index-item-description">Servlet mappings</div>
+					</dd>
+		</dl>
+	<a name="r"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">r</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="include-title">Response.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_HttpTransport---Response.php.html">Response.php</a> in Response.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">removeReadService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodremoveReadService">Apache_Solr_Service_Balancer::removeReadService()</a> in Balancer.php</div>
+							<div class="index-item-description">Removes a service instance or descriptor from the available services</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">removeWriteService</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodremoveWriteService">Apache_Solr_Service_Balancer::removeWriteService()</a> in Balancer.php</div>
+							<div class="index-item-description">Removes a service instance or descriptor from the available services</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Response.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Response.php.html">Response.php</a> in Response.php</div>
+					</dd>
+		</dl>
+	<a name="s"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">s</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">search</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsearch">Apache_Solr_Service::search()</a> in Service.php</div>
+							<div class="index-item-description">Simple Search interface</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">search</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsearch">Apache_Solr_Service_Balancer::search()</a> in Balancer.php</div>
+							<div class="index-item-description">Simple Search interface</div>
+					</dd>
+			<dt class="field">
+						SEARCH_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSEARCH_SERVLET">Apache_Solr_Service::SEARCH_SERVLET</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="include-title">Service.php</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/_Service.php.html">Service.php</a> in Service.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetBoost">Apache_Solr_Document::setBoost()</a> in Document.php</div>
+							<div class="index-item-description">Set document boost factor</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCollapseSingleValueArrays</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetCollapseSingleValueArrays">Apache_Solr_Service::setCollapseSingleValueArrays()</a> in Service.php</div>
+							<div class="index-item-description">Set the collapse single value arrays flag.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetCreateDocuments">Apache_Solr_Service::setCreateDocuments()</a> in Service.php</div>
+							<div class="index-item-description">Set the create documents flag. This determines whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects will  parse the response and create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instances in place.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setCreateDocuments</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetCreateDocuments">Apache_Solr_Service_Balancer::setCreateDocuments()</a> in Balancer.php</div>
+							<div class="index-item-description">Set the create documents flag. This determines whether <a href="Apache/Solr/Apache_Solr_Response.html">Apache_Solr_Response</a> objects will  parse the response and create <a href="Apache/Solr/Apache_Solr_Document.html">Apache_Solr_Document</a> instances in place.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Abstract.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Abstract::setDefaultTimeout()</a> in Abstract.php</div>
+							<div class="index-item-description">Set the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetDefaultTimeout">Apache_Solr_Service::setDefaultTimeout()</a> in Service.php</div>
+							<div class="index-item-description">Set the default timeout for all calls that aren't passed a specific timeout</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setDefaultTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Interface.html#methodsetDefaultTimeout">Apache_Solr_HttpTransport_Interface::setDefaultTimeout()</a> in Interface.php</div>
+							<div class="index-item-description">Set the current default timeout for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setField</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetField">Apache_Solr_Document::setField()</a> in Document.php</div>
+							<div class="index-item-description">Set a field value. Multi-valued fields should be set as arrays  or instead use the addField(...) function which will automatically  make sure the field is an array.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setFieldBoost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetFieldBoost">Apache_Solr_Document::setFieldBoost()</a> in Document.php</div>
+							<div class="index-item-description">Set the field boost for a document field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setHost</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetHost">Apache_Solr_Service::setHost()</a> in Service.php</div>
+							<div class="index-item-description">Set the host used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setHttpTransport</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetHttpTransport">Apache_Solr_Service::setHttpTransport()</a> in Service.php</div>
+							<div class="index-item-description">Set the HTTP Transport implemenation that will be used for all HTTP requests</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setMultiValue</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#methodsetMultiValue">Apache_Solr_Document::setMultiValue()</a> in Document.php</div>
+							<div class="index-item-description">Handle the array manipulation for a multi-valued field</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setNamedListTreatment</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetNamedListTreatment">Apache_Solr_Service::setNamedListTreatment()</a> in Service.php</div>
+							<div class="index-item-description">Set how NamedLists should be formatted in the response data. This mainly effects  the facet counts format.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setPath</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetPath">Apache_Solr_Service::setPath()</a> in Service.php</div>
+							<div class="index-item-description">Set the path used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setPort</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetPort">Apache_Solr_Service::setPort()</a> in Service.php</div>
+							<div class="index-item-description">Set the port used. If empty will fallback to constants</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setQueryDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetQueryDelimiter">Apache_Solr_Service::setQueryDelimiter()</a> in Service.php</div>
+							<div class="index-item-description">Set the string used to separate the path form the query string.</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setQueryStringDelimiter</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodsetQueryStringDelimiter">Apache_Solr_Service::setQueryStringDelimiter()</a> in Service.php</div>
+							<div class="index-item-description">Set the string used to separate the parameters in thequery string  Defaulted to '&amp;'</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setReadPingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetReadPingTimeout">Apache_Solr_Service_Balancer::setReadPingTimeout()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setUseBackoff</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetUseBackoff">Apache_Solr_Service_Balancer::setUseBackoff()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						<span class="method-title">setWritePingTimeout</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodsetWritePingTimeout">Apache_Solr_Service_Balancer::setWritePingTimeout()</a> in Balancer.php</div>
+					</dd>
+			<dt class="field">
+						SOLR_WRITER
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSOLR_WRITER">Apache_Solr_Service::SOLR_WRITER</a> in Service.php</div>
+							<div class="index-item-description">Response writer we'll request - JSON. See http://code.google.com/p/solr-php-client/issues/detail?id=6#c1 for reasoning</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#constSVN_ID">Apache_Solr_Service_Balancer::SVN_ID</a> in Balancer.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#constSVN_ID">Apache_Solr_HttpTransport_Curl::SVN_ID</a> in Curl.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSVN_ID">Apache_Solr_Service::SVN_ID</a> in Service.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#constSVN_ID">Apache_Solr_Response::SVN_ID</a> in Response.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html#constSVN_ID">Apache_Solr_ParserException::SVN_ID</a> in ParserException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_ID">Apache_Solr_InvalidArgumentException::SVN_ID</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#constSVN_ID">Apache_Solr_HttpTransport_FileGetContents::SVN_ID</a> in FileGetContents.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#constSVN_ID">Apache_Solr_HttpTransportException::SVN_ID</a> in HttpTransportException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html#constSVN_ID">Apache_Solr_Exception::SVN_ID</a> in Exception.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_ID">Apache_Solr_NoServiceAvailableException::SVN_ID</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#constSVN_ID">Apache_Solr_HttpTransport_CurlNoReuse::SVN_ID</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_ID
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#constSVN_ID">Apache_Solr_Document::SVN_ID</a> in Document.php</div>
+							<div class="index-item-description">SVN ID meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constSVN_REVISION">Apache_Solr_Service::SVN_REVISION</a> in Service.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Document.html#constSVN_REVISION">Apache_Solr_Document::SVN_REVISION</a> in Document.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Exception.html#constSVN_REVISION">Apache_Solr_Exception::SVN_REVISION</a> in Exception.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html#constSVN_REVISION">Apache_Solr_HttpTransport_FileGetContents::SVN_REVISION</a> in FileGetContents.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransportException.html#constSVN_REVISION">Apache_Solr_HttpTransportException::SVN_REVISION</a> in HttpTransportException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Response.html#constSVN_REVISION">Apache_Solr_Response::SVN_REVISION</a> in Response.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html#constSVN_REVISION">Apache_Solr_HttpTransport_CurlNoReuse::SVN_REVISION</a> in CurlNoReuse.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_NoServiceAvailableException.html#constSVN_REVISION">Apache_Solr_NoServiceAvailableException::SVN_REVISION</a> in NoServiceAvailableException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#constSVN_REVISION">Apache_Solr_Service_Balancer::SVN_REVISION</a> in Balancer.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_HttpTransport_Curl.html#constSVN_REVISION">Apache_Solr_HttpTransport_Curl::SVN_REVISION</a> in Curl.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_InvalidArgumentException.html#constSVN_REVISION">Apache_Solr_InvalidArgumentException::SVN_REVISION</a> in InvalidArgumentException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+			<dt class="field">
+						SVN_REVISION
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_ParserException.html#constSVN_REVISION">Apache_Solr_ParserException::SVN_REVISION</a> in ParserException.php</div>
+							<div class="index-item-description">SVN Revision meta data for this class</div>
+					</dd>
+		</dl>
+	<a name="t"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">t</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						<span class="method-title">threads</span>
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#methodthreads">Apache_Solr_Service::threads()</a> in Service.php</div>
+							<div class="index-item-description">Call the /admin/threads servlet and retrieve information about all threads in the  Solr servlet's thread group. Useful for diagnostics.</div>
+					</dd>
+			<dt class="field">
+						THREADS_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constTHREADS_SERVLET">Apache_Solr_Service::THREADS_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+	<a name="u"></a>
+	<div class="index-letter-section">
+		<div style="float: left" class="index-letter-title">u</div>
+		<div style="float: right"><a href="#top">top</a></div>
+		<div style="clear: both"></div>
+	</div>
+	<dl>
+			<dt class="field">
+						UPDATE_SERVLET
+					</dt>
+		<dd class="index-item-body">
+			<div class="index-item-details"><a href="Apache/Solr/Apache_Solr_Service.html#constUPDATE_SERVLET">Apache_Solr_Service::UPDATE_SERVLET</a> in Service.php</div>
+					</dd>
+		</dl>
+
+<div class="index-letter-menu">
+	<a class="index-letter" href="elementindex_Apache.html#a">a</a>
+	<a class="index-letter" href="elementindex_Apache.html#b">b</a>
+	<a class="index-letter" href="elementindex_Apache.html#c">c</a>
+	<a class="index-letter" href="elementindex_Apache.html#d">d</a>
+	<a class="index-letter" href="elementindex_Apache.html#e">e</a>
+	<a class="index-letter" href="elementindex_Apache.html#f">f</a>
+	<a class="index-letter" href="elementindex_Apache.html#g">g</a>
+	<a class="index-letter" href="elementindex_Apache.html#h">h</a>
+	<a class="index-letter" href="elementindex_Apache.html#i">i</a>
+	<a class="index-letter" href="elementindex_Apache.html#m">m</a>
+	<a class="index-letter" href="elementindex_Apache.html#n">n</a>
+	<a class="index-letter" href="elementindex_Apache.html#o">o</a>
+	<a class="index-letter" href="elementindex_Apache.html#p">p</a>
+	<a class="index-letter" href="elementindex_Apache.html#r">r</a>
+	<a class="index-letter" href="elementindex_Apache.html#s">s</a>
+	<a class="index-letter" href="elementindex_Apache.html#t">t</a>
+	<a class="index-letter" href="elementindex_Apache.html#u">u</a>
+	<a class="index-letter" href="elementindex_Apache.html#_">_</a>
+</div>	</body>
+</html>

+ 95 - 0
SolrPhpClient/phpdocs/errors.html

@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>phpDocumentor Parser Errors and Warnings</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<a href="#Post-parsing">Post-parsing</a><br>
+<a href="#Balancer.php">Balancer.php</a><br>
+<a href="#Curl.php">Curl.php</a><br>
+<a href="#CurlNoReuse.php">CurlNoReuse.php</a><br>
+<a href="#Document.php">Document.php</a><br>
+<a href="#Exception.php">Exception.php</a><br>
+<a href="#FileGetContents.php">FileGetContents.php</a><br>
+<a href="#HttpTransportException.php">HttpTransportException.php</a><br>
+<a href="#Interface.php">Interface.php</a><br>
+<a href="#InvalidArgumentException.php">InvalidArgumentException.php</a><br>
+<a href="#NoServiceAvailableException.php">NoServiceAvailableException.php</a><br>
+<a href="#ParserException.php">ParserException.php</a><br>
+<a href="#Response.php">Response.php</a><br>
+<a href="#Service.php">Service.php</a><br>
+<a name="Abstract.php"></a>
+<h1>Abstract.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 43</b> - no @package tag was used in a DocBlock for class Apache_Solr_HttpTransport_Abstract<br>
+<a name="Balancer.php"></a>
+<h1>Balancer.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 40</b> - Page-level DocBlock precedes "require_once dirname(dirname(__FILE__)).'/Service.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 51</b> - no @package tag was used in a DocBlock for class Apache_Solr_Service_Balancer<br>
+<a name="Curl.php"></a>
+<h1>Curl.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/Abstract.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 45</b> - no @package tag was used in a DocBlock for class Apache_Solr_HttpTransport_Curl<br>
+<a name="CurlNoReuse.php"></a>
+<h1>CurlNoReuse.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/Abstract.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 47</b> - no @package tag was used in a DocBlock for class Apache_Solr_HttpTransport_CurlNoReuse<br>
+<a name="Document.php"></a>
+<h1>Document.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 58</b> - no @package tag was used in a DocBlock for class Apache_Solr_Document<br>
+<h2>Errors:</h2><br>
+<b>Error on line 57</b> - Unclosed code tag in DocBlock, parsing will be incorrect<br>
+<a name="Exception.php"></a>
+<h1>Exception.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - DocBlock would be page-level, but precedes class "Apache_Solr_Exception", use another DocBlock to document the file<br>
+<a name="FileGetContents.php"></a>
+<h1>FileGetContents.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/Abstract.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 45</b> - no @package tag was used in a DocBlock for class Apache_Solr_HttpTransport_FileGetContents<br>
+<a name="HttpTransportException.php"></a>
+<h1>HttpTransportException.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - DocBlock would be page-level, but precedes class "Apache_Solr_HttpTransportException", use another DocBlock to document the file<br>
+<a name="Interface.php"></a>
+<h1>Interface.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/Response.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 47</b> - no @package tag was used in a DocBlock for interface Apache_Solr_HttpTransport_Interface<br>
+<a name="InvalidArgumentException.php"></a>
+<h1>InvalidArgumentException.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - DocBlock would be page-level, but precedes class "Apache_Solr_InvalidArgumentException", use another DocBlock to document the file<br>
+<a name="NoServiceAvailableException.php"></a>
+<h1>NoServiceAvailableException.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - DocBlock would be page-level, but precedes class "Apache_Solr_NoServiceAvailableException", use another DocBlock to document the file<br>
+<a name="ParserException.php"></a>
+<h1>ParserException.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 39</b> - DocBlock would be page-level, but precedes class "Apache_Solr_ParserException", use another DocBlock to document the file<br>
+<a name="Response.php"></a>
+<h1>Response.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 38</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/ParserException.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 44</b> - no @package tag was used in a DocBlock for class Apache_Solr_HttpTransport_Response<br>
+<b>Warning on line 48</b> - no @package tag was used in a DocBlock for class Apache_Solr_Response<br>
+<a name="Service.php"></a>
+<h1>Service.php</h1>
+<h2>Warnings:</h2><br>
+<b>Warning on line 40</b> - Page-level DocBlock precedes "require_once dirname(__FILE__).'/Exception.php'", use another DocBlock to document the source element<br>
+<b>Warning on line 86</b> - no @package tag was used in a DocBlock for class Apache_Solr_Service<br>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:19 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 24 - 0
SolrPhpClient/phpdocs/index.html

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html 
+     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//FR"
+     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+   <html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+	<!-- Generated by phpDocumentor on Wed, 04 May 2011 11:01:08 -0400  -->
+  <title>Generated Documentation</title>
+  <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+</head>
+
+<FRAMESET rows='120,*'>
+	<FRAME src='packages.html' name='left_top' frameborder="1" bordercolor="#999999">
+	<FRAMESET cols='25%,*'>
+		<FRAME src='li_Apache.html' name='left_bottom' frameborder="1" bordercolor="#999999">
+		<FRAME src='blank.html' name='right' frameborder="1" bordercolor="#999999">
+	</FRAMESET>
+	<NOFRAMES>
+		<H2>Frame Alert</H2>
+		<P>This document is designed to be viewed using the frames feature.
+		If you see this message, you are using a non-frame-capable web client.</P>
+	</NOFRAMES>
+</FRAMESET>
+</HTML>

+ 72 - 0
SolrPhpClient/phpdocs/li_Apache.html

@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<div class="package-title">Apache</div>
+<div class="package-details">
+			
+	<dl class="tree">
+		
+		<dt class="folder-title">Description</dt>
+		<dd>
+			<a href='classtrees_Apache.html' target='right'>Class trees</a><br />
+			<a href='elementindex_Apache.html' target='right'>Index of elements</a><br />
+							<a href="todolist.html" target="right">Todo List</a><br />
+					</dd>
+	
+							
+							
+																												
+						
+							
+											
+				<dt class="sub-package">Solr</dt>
+				<dd>
+					<dl class="tree">
+																			<dt class="folder-title">Classes</dt>
+															<dd><a href='Apache/Solr/Apache_Solr_Document.html' target='right'>Apache_Solr_Document</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_Exception.html' target='right'>Apache_Solr_Exception</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransportException.html' target='right'>Apache_Solr_HttpTransportException</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_Abstract.html' target='right'>Apache_Solr_HttpTransport_Abstract</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_Curl.html' target='right'>Apache_Solr_HttpTransport_Curl</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_CurlNoReuse.html' target='right'>Apache_Solr_HttpTransport_CurlNoReuse</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_FileGetContents.html' target='right'>Apache_Solr_HttpTransport_FileGetContents</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_Interface.html' target='right'>Apache_Solr_HttpTransport_Interface</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_HttpTransport_Response.html' target='right'>Apache_Solr_HttpTransport_Response</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_InvalidArgumentException.html' target='right'>Apache_Solr_InvalidArgumentException</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_NoServiceAvailableException.html' target='right'>Apache_Solr_NoServiceAvailableException</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_ParserException.html' target='right'>Apache_Solr_ParserException</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_Response.html' target='right'>Apache_Solr_Response</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_Service.html' target='right'>Apache_Solr_Service</a></dd>
+															<dd><a href='Apache/Solr/Apache_Solr_Service_Balancer.html' target='right'>Apache_Solr_Service_Balancer</a></dd>
+																																<dt class="folder-title">Files</dt>
+															<dd><a href='Apache/Solr/_HttpTransport---Abstract.php.html' target='right'>Abstract.php</a></dd>
+															<dd><a href='Apache/Solr/_Service---Balancer.php.html' target='right'>Balancer.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransport---Curl.php.html' target='right'>Curl.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransport---CurlNoReuse.php.html' target='right'>CurlNoReuse.php</a></dd>
+															<dd><a href='Apache/Solr/_Document.php.html' target='right'>Document.php</a></dd>
+															<dd><a href='Apache/Solr/_Exception.php.html' target='right'>Exception.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransport---FileGetContents.php.html' target='right'>FileGetContents.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransportException.php.html' target='right'>HttpTransportException.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransport---Interface.php.html' target='right'>Interface.php</a></dd>
+															<dd><a href='Apache/Solr/_InvalidArgumentException.php.html' target='right'>InvalidArgumentException.php</a></dd>
+															<dd><a href='Apache/Solr/_NoServiceAvailableException.php.html' target='right'>NoServiceAvailableException.php</a></dd>
+															<dd><a href='Apache/Solr/_ParserException.php.html' target='right'>ParserException.php</a></dd>
+															<dd><a href='Apache/Solr/_Response.php.html' target='right'>Response.php</a></dd>
+															<dd><a href='Apache/Solr/_HttpTransport---Response.php.html' target='right'>Response.php</a></dd>
+															<dd><a href='Apache/Solr/_Service.php.html' target='right'>Service.php</a></dd>
+																		</dl>
+				</dd>
+								
+						
+			</dl>
+</div>
+<p class="notes"><a href="http://www.phpdoc.org" target="_blank">phpDocumentor v <span class="field">1.4.3</span></a></p>
+</BODY>
+</HTML>

+ 32 - 0
SolrPhpClient/phpdocs/media/banner.css

@@ -0,0 +1,32 @@
+body 
+{ 
+	background-color: #DDDDDD;
+	margin: 0px; 
+	padding: 0px;
+}
+
+/* Banner (top bar) classes */
+
+.banner {  }
+
+.banner-menu 
+{ 
+	clear: both;
+	padding: .5em;
+	border-top: 2px solid #999999;	
+}
+
+.banner-title 
+{ 
+	text-align: right;
+	font-size: 20pt;
+	font-weight: bold;
+	margin: .2em;
+}
+
+.package-selector 
+{ 
+	background-color: #CCCCCC;
+	border: 1px solid black;
+	color: blue;
+}

+ 142 - 0
SolrPhpClient/phpdocs/media/stylesheet.css

@@ -0,0 +1,142 @@
+a { color: #0000FF; text-decoration: none; }
+a:hover { color: #FF0000; text-decoration: underline; }
+a:active { color: #FF0000; text-decoration: underline; }
+
+body { background-color: #EEEEEE; font-family: Verdana, Arial, sans-serif }
+body, table { font-size: 10pt }
+a img { border: 0px; }
+dd { margin-left: 0px; padding-left: 1em; }
+
+/* Page layout/boxes */
+
+.info-box {}
+.info-box-title { margin: 1em 0em 0em 0em; padding: .25em; font-weight: normal; font-size: 14pt; border: 2px solid #999999; background-color: #DDDDDD }
+.info-box-body { border: 1px solid #999999; padding: .5em; background-color: #F8F8F8; }
+.nav-bar { font-size: 8pt; white-space: nowrap; text-align: right; padding: .2em; margin: 0em 0em 1em 0em; }
+
+.oddrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em}
+.evenrow { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; margin-bottom: 1em}
+
+.page-body { max-width: 800px; margin: auto; }
+.tree dl { margin: 0px }
+
+/* Index formatting classes */
+
+.index-item-body { margin-top: .5em; margin-bottom: .5em}
+.index-item-description { margin-top: .25em }
+.index-item-details { font-weight: normal; font-style: italic; font-size: 8pt }
+.index-letter-section { background-color: #EEEEEE; border: 1px dotted #999999; padding: .5em; margin-bottom: 1em}
+.index-letter-title { font-size: 12pt; font-weight: bold }
+.index-letter-menu { text-align: center; margin: 1em }
+.index-letter { font-size: 12pt }
+
+/* Docbook classes */
+
+.description {}
+.short-description { font-weight: bold; color: #666666; }
+.tags {	padding-left: 0em; margin-left: 3em; color: #666666; list-style-type: square; }
+.parameters {	padding-left: 0em; margin-left: 3em; font-style: italic; list-style-type: square; }
+.redefinitions { font-size: 8pt; padding-left: 0em; margin-left: 2em; }
+.package {  }
+.package-title { font-weight: bold; font-size: 14pt; border-bottom: 1px solid black }
+.package-details { font-size: 85%; }
+.sub-package { font-weight: bold; font-size: 120% }
+.tutorial { border-width: thin; border-color: #0066ff }
+.tutorial-nav-box { width: 100%; border: 2px solid #999999; background-color: #DDDDDD }
+.nav-button-disabled { color: #999999; }
+.nav-button:active, 
+.nav-button:focus, 
+.nav-button:hover { background-color: #AAAAAA; outline: 1px solid #666666; text-decoration: none }
+.folder-title { font-style: italic }
+
+/* Generic formatting */
+
+.field { font-weight: bold; }
+.detail { font-size: 8pt; }
+.notes { font-style: italic; font-size: 8pt; }
+.separator { background-color: #999999; height: 2px; }
+.warning {  color: #FF6600; }
+.disabled { font-style: italic; color: #999999; }
+
+/* Code elements */
+
+.line-number {  }
+
+.class-table { width: 100%; }
+.class-table-header { border-bottom: 1px dotted #666666; text-align: left}
+.class-name { color: #000000; font-weight: bold; }
+
+.method-summary { padding-left: 1em; font-size: 8pt }
+.method-header { }
+.method-definition { margin-bottom: .3em }
+.method-title { font-weight: bold; }
+.method-name { font-weight: bold; }
+.method-signature { font-size: 85%; color: #0066BB; margin: .5em 0em }
+.method-result { font-style: italic; }
+
+.var-summary { padding-left: 1em; font-size: 8pt; }
+.var-header { }
+.var-title { margin-bottom: .3em }
+.var-type { color: red; font-weight: bold }
+.var-name { font-weight: bold; }
+.var-default {}
+.var-description { font-weight: normal; color: #000000; }
+
+.include-title {  }
+.include-type { font-style: italic; }
+.include-name { font-weight: bold; }
+
+.const-title {  }
+.const-name { font-weight: bold; }
+
+/* Syntax highlighting */
+
+.src-code {  border: 1px solid #336699; padding: 1em; background-color: #EEEEEE;
+             font-family: 'Courier New', Courier, monospace; font-weight: normal; }
+.src-line {  font-family: 'Courier New', Courier, monospace; font-weight: normal; }
+
+.src-comm { color: #666666; }
+.src-id {  }
+.src-inc { color: #0000FF; }
+.src-key { color: #0000FF; }
+.src-num { color: #CC0000; }
+.src-str { color: #66cccc; }
+.src-sym { font-weight: bold; }
+.src-var { }
+
+.src-php { font-weight: bold; }
+
+.src-doc { color: #009999 }
+.src-doc-close-template { color: #0000FF }
+.src-doc-coretag { color: #0099FF; font-weight: bold }
+.src-doc-inlinetag { color: #0099FF }
+.src-doc-internal { color: #6699cc }
+.src-doc-tag { color: #0080CC }
+.src-doc-template { color: #0000FF }
+.src-doc-type { font-style: italic }
+.src-doc-var { font-style: italic }
+
+.tute-tag { color: #009999 }
+.tute-attribute-name { color: #0000FF }
+.tute-attribute-value { color: #0099FF }
+.tute-entity { font-weight: bold; }
+.tute-comment { font-style: italic }
+.tute-inline-tag { color: #636311; font-weight: bold }
+
+/* tutorial */
+
+.authors {  }
+.author { font-style: italic; font-weight: bold }
+.author-blurb { margin: .5em 0em .5em 2em; font-size: 85%; font-weight: normal; font-style: normal }
+.example { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; }
+.listing { background-color: #DDDDDD; border: 1px solid #999999; padding: .5em; white-space: nowrap; }
+.release-info { font-size: 85%; font-style: italic; margin: 1em 0em }
+.ref-title-box {  }
+.ref-title {  }
+.ref-purpose { font-style: italic; color: #666666 }
+.ref-synopsis {  }
+.title { font-weight: bold; border-bottom: 1px solid #888888; color: #888888;  }
+.cmd-synopsis { margin: 1em 0em }
+.cmd-title { font-weight: bold }
+.toc { margin-left: 2em; padding-left: 0em }
+

+ 29 - 0
SolrPhpClient/phpdocs/packages.html

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title></title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<link rel="stylesheet" href="media/banner.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+			<div class="banner">
+				<div class="banner-title">Apache</div>
+				<div class="banner-menu">
+					<form>
+						<table cellpadding="0" cellspacing="0" style="width: 100%">
+							<tr>
+								<td>
+																	</td>
+								<td style="width: 2em">&nbsp;</td>
+								<td style="text-align: right">
+																	</td>
+							</tr>
+						</table>
+					</form>
+				</div>
+			</div>
+		</body>
+	</html>

+ 29 - 0
SolrPhpClient/phpdocs/todolist.html

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+  <html xmlns="http://www.w3.org/1999/xhtml">
+		<head>
+			<!-- template designed by Marco Von Ballmoos -->
+			<title>Todo List</title>
+			<link rel="stylesheet" href="media/stylesheet.css" />
+			<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'/>
+		</head>
+		<body>
+						<div align="center"><h1>Todo List</h1></div>
+<h2>Apache</h2>
+<h3><a href="Apache/Solr/Apache_Solr_Service.html">Apache_Solr_Service</a></h3>
+<ul>
+    <li>Investigate using other HTTP clients other than file_get_contents built-in handler. Could provide performance  improvements when dealing with multiple requests by using HTTP's keep alive functionality</li>
+</ul>
+<h3><a href="Apache/Solr/Apache_Solr_Service.html#methodextractFromString">Apache_Solr_Service::extractFromString()</a></h3>
+<ul>
+    <li>Should be using multipart/form-data to post parameter values, but I could not get my implementation to work. Needs revisisted.</li>
+</ul>
+<h3><a href="Apache/Solr/Apache_Solr_Service_Balancer.html#methodextractFromString">Apache_Solr_Service_Balancer::extractFromString()</a></h3>
+<ul>
+    <li>Should be using multipart/form-data to post parameter values, but I could not get my implementation to work. Needs revisisted.</li>
+</ul>
+	<p class="notes" id="credit">
+		Documentation generated on Wed, 04 May 2011 11:01:19 -0400 by <a href="http://www.phpdoc.org" target="_blank">phpDocumentor 1.4.3</a>
+	</p>
+	</body>
+</html>

+ 439 - 0
SolrPhpClient/tests/Apache/Solr/DocumentTest.php

@@ -0,0 +1,439 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_Document Unit Test
+ */
+class Apache_Solr_DocumentTest extends PHPUnit_Framework_TestCase
+{
+	/**
+	 * Fixture used for testing
+	 *
+	 * @var Apache_Solr_Document
+	 */
+	private $_fixture;
+
+	/**
+	 * Setup for the fixture before each unit test - part of test case API
+	 */
+	protected function setup()
+	{
+		$this->_fixture = new Apache_Solr_Document();
+	}
+
+	/**
+	 * Teardown after each unit test - part of test case API
+	 */
+	protected function tearDown()
+	{
+		unset($this->_fixture);
+	}
+
+	public function testDefaultStateAfterConstructor()
+	{
+		// document boost should be false
+		$this->assertFalse($this->_fixture->getBoost());
+
+		// document fields should be empty
+		$this->assertEquals(0, count($this->_fixture->getFieldNames()));
+		$this->assertEquals(0, count($this->_fixture->getFieldValues()));
+		$this->assertEquals(0, count($this->_fixture->getFieldBoosts()));
+
+		// document iterator should be empty
+		$this->assertEquals(0, iterator_count($this->_fixture));
+	}
+
+	public function testSetAndGetField()
+	{
+		$field = 'field';
+		$value = 'value';
+		$boost = 0.5;
+
+		// set the field
+		$this->_fixture->setField($field, $value, $boost);
+
+		$result = $this->_fixture->getField($field);
+
+		// check the array values
+		$this->assertTrue(is_array($result));
+		$this->assertEquals($field, $result['name']);
+		$this->assertEquals($value, $result['value']);
+		$this->assertEquals($boost, $result['boost']);
+	}
+
+	public function testGetFieldReturnsFalseForNonExistentField()
+	{
+		$this->assertFalse($this->_fixture->getField('field'));
+	}
+
+	public function testMagicGetForFieldValues()
+	{
+		$field = 'field';
+		$value = 'value';
+
+		$this->_fixture->setField($field, $value);
+
+		// test the __get value
+		$this->assertEquals($value, $this->_fixture->{$field});
+	}
+	
+	/**
+	 * Added for issue #48 (http://code.google.com/p/solr-php-client/issues/detail?id=48)
+	 */
+	public function testMagicGetReturnsNullForNonExistentField()
+	{
+		$this->assertNull($this->_fixture->nonExistent);
+	}
+
+	public function testMagicSetForFieldValues()
+	{
+		$field = 'field';
+		$value = 'value';
+
+		// set field value with magic __set
+		$this->_fixture->{$field} = $value;
+
+		$fieldArray = $this->_fixture->getField($field);
+
+		// set values
+		$this->assertEquals($field, $fieldArray['name']);
+		$this->assertEquals($value, $fieldArray['value']);
+		$this->assertTrue($fieldArray['boost'] === false);
+	}
+
+	public function testMagicIssetForNonExistentField()
+	{
+		$this->assertFalse(isset($this->_fixture->field));
+	}
+
+	public function testMagicIssetForExistingField()
+	{
+		$field = 'field';
+		$this->_fixture->{$field} = 'value';
+		$this->assertTrue(isset($this->_fixture->{$field}));
+	}
+
+	public function testMagicUnsetForExistingField()
+	{
+		$field = 'field';
+
+		$this->_fixture->{$field} = 'value';
+
+		// now unset the field
+		unset($this->_fixture->{$field});
+
+		// now test that its unset
+		$this->assertFalse(isset($this->_fixture->{$field}));
+	}
+
+	public function testMagicUnsetForNonExistingField()
+	{
+		$field = 'field';
+		unset($this->_fixture->{$field});
+
+		// now test that it still does not exist
+		$this->assertFalse(isset($this->_fixture->{$field}));
+	}
+
+	public function testSetAndGetFieldBoostWithPositiveNumberSetsBoost()
+	{
+		$field = 'field';
+		$boost = 0.5;
+
+		$this->_fixture->setFieldBoost($field, $boost);
+
+		// test the field boost
+		$this->assertEquals($boost, $this->_fixture->getFieldBoost($field));
+	}
+
+	public function testSetAndGetFieldBoostWithZeroRemovesBoost()
+	{
+		$field = 'field';
+		$boost = 0;
+
+		$this->_fixture->setFieldBoost($field, $boost);
+
+		// test the field boost
+		$this->assertTrue($this->_fixture->getFieldBoost($field) === false);
+	}
+
+	public function testSetAndGetFieldBoostWithNegativeNumberRemovesBoost()
+	{
+		$field = 'field';
+		$boost = -1;
+
+		$this->_fixture->setFieldBoost($field, $boost);
+
+		// test the field boost
+		$this->assertTrue($this->_fixture->getFieldBoost($field) === false);
+	}
+
+	public function testSetAndGetFieldBoostWithNonNumberRemovesBoost()
+	{
+		$field = 'field';
+		$boost = "i am not a number";
+
+		$this->_fixture->setFieldBoost($field, $boost);
+
+		// test the field boost
+		$this->assertTrue($this->_fixture->getFieldBoost($field) === false);
+	}
+
+	public function testSetAndGetBoostWithPositiveNumberSetsBoost()
+	{
+		$boost = 0.5;
+		$this->_fixture->setBoost($boost);
+
+		// the boost should now be set
+		$this->assertEquals($boost, $this->_fixture->getBoost());
+	}
+
+	public function testSetAndGetBoostWithZeroRemovesBoost()
+	{
+		$this->_fixture->setBoost(0);
+
+		// should be boolean false
+		$this->assertTrue($this->_fixture->getBoost() === false);
+	}
+
+	public function testSetAndGetBoostWithNegativeNumberRemovesBoost()
+	{
+		$this->_fixture->setBoost(-1);
+
+		// should be boolean false
+		$this->assertTrue($this->_fixture->getBoost() === false);
+	}
+
+	public function testSetAndGetBoostWithNonNumberRemovesBoost()
+	{
+		$this->_fixture->setBoost("i am not a number");
+
+		// should be boolean false
+		$this->assertTrue($this->_fixture->getBoost() === false);
+	}
+
+	public function testAddFieldCreatesMultiValueWhenFieldDoesNotExist()
+	{
+		$field = 'field';
+		$value = 'value';
+
+		$this->_fixture->addField($field, $value);
+
+		// check that value is an array with correct values
+		$fieldValue = $this->_fixture->{$field};
+
+		$this->assertTrue(is_array($fieldValue));
+		$this->assertEquals(1, count($fieldValue));
+		$this->assertEquals($value, $fieldValue[0]);
+	}
+
+	/**
+	 *	setMultiValue has been deprecated and defers to addField
+	 *
+	 *	@deprecated
+	 */
+	public function testSetMultiValueCreateMultiValueWhenFieldDoesNotExist()
+	{
+		$field = 'field';
+		$value = 'value';
+
+		$this->_fixture->setMultiValue($field, $value);
+
+		// check that value is an array with correct values
+		$fieldValue = $this->_fixture->{$field};
+
+		$this->assertTrue(is_array($fieldValue));
+		$this->assertEquals(1, count($fieldValue));
+		$this->assertEquals($value, $fieldValue[0]);
+	}
+
+	public function testAddFieldCreatesMultiValueWhenFieldDoesExistAsSingleValue()
+	{
+		$field = 'field';
+		$value1 = 'value1';
+		$value2 = 'value2';
+
+		// set first value as singular value
+		$this->_fixture->{$field} = $value1;
+
+		// add a second value with addField
+		$this->_fixture->addField($field, $value2);
+
+		// check that value is an array with correct values
+		$fieldValue = $this->_fixture->{$field};
+
+		$this->assertTrue(is_array($fieldValue));
+		$this->assertEquals(2, count($fieldValue));
+		$this->assertEquals($value1, $fieldValue[0]);
+		$this->assertEquals($value2, $fieldValue[1]);
+	}
+
+	/**
+	 *	setMultiValue has been deprecated and defers to addField
+	 *
+	 *	@deprecated
+	 */
+	public function testSetMultiValueCreatesMultiValueWhenFieldDoesExistAsSingleValue()
+	{
+		$field = 'field';
+		$value1 = 'value1';
+		$value2 = 'value2';
+
+		// set first value as singular value
+		$this->_fixture->{$field} = $value1;
+
+		// add a second value with addField
+		$this->_fixture->setMultiValue($field, $value2);
+
+		// check that value is an array with correct values
+		$fieldValue = $this->_fixture->{$field};
+
+		$this->assertTrue(is_array($fieldValue));
+		$this->assertEquals(2, count($fieldValue));
+		$this->assertEquals($value1, $fieldValue[0]);
+		$this->assertEquals($value2, $fieldValue[1]);
+	}
+
+	public function testAddFieldWithBoostSetsFieldBoost()
+	{
+		$field = 'field';
+		$boost = 0.5;
+
+		$this->_fixture->addField($field, 'value', $boost);
+
+		// check the field boost
+		$this->assertEquals($boost, $this->_fixture->getFieldBoost($field));
+	}
+
+	public function testAddFieldWithBoostMultipliesWithAPreexistingBoost()
+	{
+		$field = 'field';
+		$boost = 0.5;
+
+		// set a field with a boost
+		$this->_fixture->setField($field, 'value1', $boost);
+
+		// now add another value with the same boost
+		$this->_fixture->addField($field, 'value2', $boost);
+
+		// new boost should be $boost * $boost
+		$this->assertEquals($boost * $boost, $this->_fixture->getFieldBoost($field));
+	}
+
+	public function testGetFieldNamesIsInitiallyEmpty()
+	{
+		$fieldNames = $this->_fixture->getFieldNames();
+
+		$this->assertTrue(empty($fieldNames));
+	}
+
+	public function testGetFieldNamesAfterFieldIsSetIsNotEmpty()
+	{
+		$field = 'field';
+
+		$this->_fixture->{$field} = 'value';
+		$fieldNames = $this->_fixture->getFieldNames();
+
+		$this->assertTrue(!empty($fieldNames));
+		$this->assertEquals(1, count($fieldNames));
+		$this->assertEquals($field, $fieldNames[0]);
+	}
+
+	public function testGetFieldValuesIsInitiallyEmpty()
+	{
+		$fieldValues = $this->_fixture->getFieldValues();
+
+		$this->assertTrue(empty($fieldValues));
+	}
+
+	public function testGetFieldValuessAfterFieldIsSetIsNotEmpty()
+	{
+		$value = 'value';
+
+		$this->_fixture->field = $value;
+		$fieldValues = $this->_fixture->getFieldValues();
+
+		$this->assertTrue(!empty($fieldValues));
+		$this->assertEquals(1, count($fieldValues));
+		$this->assertEquals($value, $fieldValues[0]);
+	}
+
+	public function testGetIteratorAfterFieldValueIsSet()
+	{
+		$field = 'field';
+		$value = 'value';
+
+		$this->_fixture->{$field} = $value;
+
+		$itemCount = 0;
+
+		foreach ($this->_fixture as $iteratedField => $iteratedValue)
+		{
+			++$itemCount;
+
+			// test field and value
+			$this->assertEquals($field, $iteratedField);
+			$this->assertEquals($value, $iteratedValue);
+		}
+
+		// test number of iterations is 1
+		$this->assertEquals(1, $itemCount);
+	}
+
+	public function testClearReturnsDocumentToDefaultState()
+	{
+		// set the document boost
+		$this->_fixture->setBoost(0.5);
+
+		// set a field
+		$this->_fixture->someField = "some value";
+
+		// clear the document to remove boost and fields
+		$this->_fixture->clear();
+
+		// document boost should now be false
+		$this->assertFalse($this->_fixture->getBoost());
+
+		// document fields should now be empty
+		$this->assertEquals(0, count($this->_fixture->getFieldNames()));
+		$this->assertEquals(0, count($this->_fixture->getFieldValues()));
+		$this->assertEquals(0, count($this->_fixture->getFieldBoosts()));
+
+		// document iterator should now be empty
+		$this->assertEquals(0, iterator_count($this->_fixture));
+	}
+}

+ 208 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransport/AbstractTest.php

@@ -0,0 +1,208 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_HttpTransport_Abstract Unit Tests
+ */
+abstract class Apache_Solr_HttpTransport_AbstractTest extends PHPUnit_Framework_TestCase
+{	
+	const TIMEOUT = 2;
+	
+	// request our copyright file from googlecode for GET and HEAD
+	const GET_URL = "http://solr-php-client.googlecode.com/svn/trunk/COPYING";
+	const GET_RESPONSE_MIME_TYPE = 'text/plain';
+	const GET_RESPONSE_ENCODING = 'UTF-8';
+	const GET_RESPONSE_MATCH = 'Copyright (c) ';
+	
+	// post to the issue list page with a search for 'meh'
+	const POST_URL = "http://code.google.com/p/solr-php-client/issues/list";
+	const POST_DATA = "can=2&q=meh&colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&cells=tiles";
+	const POST_REQUEST_CONTENT_TYPE = 'application/x-www-form-urlencoded; charset=UTF-8';
+	
+	const POST_RESPONSE_MIME_TYPE = 'text/html';
+	const POST_RESPONSE_ENCODING = 'UTF-8';
+	//const POST_RESPONSE_MATCH = 'not sure';
+	
+	abstract public function getFixture();
+	
+	public function testGetDefaultTimeoutWithDefaultConstructor()
+	{
+		$fixture = $this->getFixture();
+		$timeout = $fixture->getDefaultTimeout();
+		
+		$this->assertGreaterThan(0, $timeout);
+	}
+	
+	public function testGetDefaultTimeoutSetToSixtyForBadValues()
+	{
+		// first set our default_socket_timeout ini setting
+		$previousValue = ini_get('default_socket_timeout');
+		ini_set('default_socket_timeout', 0);
+		
+		$fixture = $this->getFixture();
+		$timeout = $fixture->getDefaultTimeout();
+		
+		// reset timeout
+		ini_set('default_socket_timeout', $previousValue);
+		
+		$this->assertEquals(60, $timeout);
+	}
+	
+	public function testSetDefaultTimeout()
+	{
+		$newTimeout = 1234;
+		
+		$fixture = $this->getFixture();
+		$fixture->setDefaultTimeout($newTimeout);
+		$timeout = $fixture->getDefaultTimeout();
+		
+		$this->assertEquals($newTimeout, $timeout);
+	}
+	
+	public function testPerformGetRequest()
+	{
+		$fixture = $this->getFixture();
+		$fixture->setDefaultTimeout(self::TIMEOUT);
+		
+		$response = $fixture->performGetRequest(self::GET_URL);
+		
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::GET_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::GET_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		$this->assertStringStartsWith(self::GET_RESPONSE_MATCH, $response->getBody(), 'body did not start with match text');
+	}
+	
+	public function testPerformGetRequestWithTimeout()
+	{
+		$fixture = $this->getFixture();
+		$response = $fixture->performGetRequest(self::GET_URL, self::TIMEOUT);
+		
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::GET_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::GET_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		$this->assertStringStartsWith(self::GET_RESPONSE_MATCH, $response->getBody(), 'body did not start with match text');
+	}
+	
+	public function testPerformHeadRequest()
+	{
+		$fixture = $this->getFixture();
+		$fixture->setDefaultTimeout(self::TIMEOUT);
+		
+		$response = $fixture->performHeadRequest(self::GET_URL);
+		
+		// we should get everything the same as a get, except the body
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::GET_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::GET_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		$this->assertEquals("", $response->getBody(), 'body was not empty');
+	}
+	
+	public function testPerformHeadRequestWithTimeout()
+	{
+		$fixture = $this->getFixture();
+		$response = $fixture->performHeadRequest(self::GET_URL, self::TIMEOUT);
+		
+		// we should get everything the same as a get, except the body
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::GET_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::GET_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		$this->assertEquals("", $response->getBody(), 'body was not empty');
+	}
+	
+	public function testPerformPostRequest()
+	{
+		$fixture = $this->getFixture();
+		$fixture->setDefaultTimeout(self::TIMEOUT);
+		
+		$response = $fixture->performPostRequest(self::POST_URL, self::POST_DATA, self::POST_REQUEST_CONTENT_TYPE);
+		
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::POST_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::POST_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		//$this->assertStringStartsWith(self::POST_RESPONSE_MATCH, $response->getBody(), 'body did not start with match text');
+	}
+	
+	public function testPerformPostRequestWithTimeout()
+	{
+		$fixture = $this->getFixture();
+		$response = $fixture->performPostRequest(self::POST_URL, self::POST_DATA, self::POST_REQUEST_CONTENT_TYPE, self::TIMEOUT);
+		
+		$this->assertType('Apache_Solr_HttpTransport_Response', $response);
+		
+		$this->assertEquals(200, $response->getStatusCode(), 'Status code was not 200');
+		$this->assertEquals(self::POST_RESPONSE_MIME_TYPE, $response->getMimeType(), 'mimetype was not correct');
+		$this->assertEquals(self::POST_RESPONSE_ENCODING, $response->getEncoding(), 'character encoding was not correct');
+		//$this->assertStringStartsWith(self::POST_RESPONSE_MATCH, $response->getBody(), 'body did not start with match text');
+	}
+		
+	/**
+	 * Test one session doing multiple requests in multiple orders
+	 */
+	public function testMultipleRequests()
+	{
+		// initial get request
+		$this->testPerformGetRequest();
+		
+		// head following get
+		$this->testPerformHeadRequest();
+		
+		// post following head
+		$this->testPerformPostRequest();
+		
+		// get following post
+		$this->testPerformGetRequest();
+		
+		// post following get
+		$this->testPerformPostRequest();
+	
+		// head following post
+		$this->testPerformHeadRequest();
+		
+		// get following post
+		$this->testPerformGetRequest();		
+	}
+}

+ 53 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransport/CurlNoReuseTest.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_HttpTransport_CurlNoReuse Unit Tests
+ */
+class Apache_Solr_HttpTransport_CurlNoReuseTest extends Apache_Solr_HttpTransport_AbstractTest
+{
+	public function getFixture()
+	{
+		// ensure curl is enabled
+		if (!extension_loaded('curl'))
+		{
+			$this->markTestSkipped("curl module is not enabled");
+		}
+		
+		return new Apache_Solr_HttpTransport_CurlNoReuse();
+	}
+}

+ 53 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransport/CurlTest.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_HttpTransport_Curl Unit Tests
+ */
+class Apache_Solr_HttpTransport_CurlTest extends Apache_Solr_HttpTransport_AbstractTest
+{	
+	public function getFixture()
+	{
+		// ensure curl is enabled
+		if (!extension_loaded('curl'))
+		{
+			$this->markTestSkipped("curl module is not enabled");
+		}
+		
+		return new Apache_Solr_HttpTransport_Curl();
+	}
+}

+ 53 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransport/FileGetContentsTest.php

@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_HttpTransport_FileGetContents Unit Tests
+ */
+class Apache_Solr_HttpTransport_FileGetContentsTest extends Apache_Solr_HttpTransport_AbstractTest
+{
+	public function getFixture()
+	{
+		// make sure allow_url_fopen is on
+		if (!ini_get("allow_url_fopen"))
+		{
+			$this->markTestSkipped("allow_url_fopen is not enabled");
+		}
+		
+		return new Apache_Solr_HttpTransport_FileGetContents();
+	}
+}

File diff suppressed because it is too large
+ 55 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransport/ResponseTest.php


+ 58 - 0
SolrPhpClient/tests/Apache/Solr/HttpTransportExceptionTest.php

@@ -0,0 +1,58 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_HttpTransportException Unit Tests
+ */
+class Apache_Solr_HttpTransportExceptionTest extends PHPUnit_Framework_TestCase
+{
+	/**
+	 * @expectedException PHPUnit_Framework_Error
+	 */
+	public function testConstructorRequiresResponse()
+	{
+		$fixture = new Apache_Solr_HttpTransportException();
+	}
+	
+	public function testGetResponse()
+	{
+		$response = Apache_Solr_ResponseTest::get0Response();
+		$fixture = new Apache_Solr_HttpTransportException($response);
+		
+		$this->assertEquals($response, $fixture->getResponse());
+	}
+}

+ 194 - 0
SolrPhpClient/tests/Apache/Solr/ResponseTest.php

@@ -0,0 +1,194 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_Response Unit Test
+ */
+class Apache_Solr_ResponseTest extends PHPUnit_Framework_TestCase
+{
+	static public function get0Response($createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		return new Apache_Solr_Response(Apache_Solr_HttpTransport_ResponseTest::get0Response(), $createDocuments, $collapseSingleValueArrays);
+	}
+
+	static public function get200Response($createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		return new Apache_Solr_Response(Apache_Solr_HttpTransport_ResponseTest::get200Response(), $createDocuments, $collapseSingleValueArrays);
+	}
+
+	static public function get200ResponseWithDocuments($createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		return new Apache_Solr_Response(Apache_Solr_HttpTransport_ResponseTest::get200ResponseWithDocuments(), $createDocuments, $collapseSingleValueArrays);
+	}
+
+	static public function get400Response($createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		return new Apache_Solr_Response(Apache_Solr_HttpTransport_ResponseTest::get400Response(), $createDocuments, $collapseSingleValueArrays);
+	}
+
+	static public function get404Response($createDocuments = true, $collapseSingleValueArrays = true)
+	{
+		return new Apache_Solr_Response(Apache_Solr_HttpTransport_ResponseTest::get404Response(), $createDocuments, $collapseSingleValueArrays);
+	}
+
+	public function testConstuctorWithValidBodyAndHeaders()
+	{
+		$fixture = self::get200Response();
+
+		// check that we parsed the HTTP status correctly
+		$this->assertEquals(Apache_Solr_HttpTransport_ResponseTest::STATUS_CODE_200, $fixture->getHttpStatus());
+
+		// check that we received the body correctly
+		$this->assertEquals(Apache_Solr_HttpTransport_ResponseTest::BODY_200, $fixture->getRawResponse());
+
+		// check that our defaults are correct
+		$this->assertEquals(Apache_Solr_HttpTransport_ResponseTest::ENCODING_200, $fixture->getEncoding());
+		$this->assertEquals(Apache_Solr_HttpTransport_ResponseTest::MIME_TYPE_200, $fixture->getType());
+	}
+
+	public function testConstructorWithBadBodyAndHeaders()
+	{
+		$fixture = self::get0Response();
+
+		// check that our defaults are correct
+		$this->assertEquals(0, $fixture->getHttpStatus());
+		$this->assertEquals("UTF-8", $fixture->getEncoding());
+		$this->assertEquals("text/plain", $fixture->getType());
+	}
+
+	public function testMagicGetWithValidBodyAndHeaders()
+	{
+		$fixture = self::get200Response();
+
+		// test top level gets
+		$this->assertType('stdClass', $fixture->responseHeader);
+		$this->assertEquals(0, $fixture->responseHeader->status);
+		$this->assertEquals(0, $fixture->responseHeader->QTime);
+
+		$this->assertType('stdClass', $fixture->response);
+		$this->assertEquals(0, $fixture->response->numFound);
+
+		$this->assertTrue(is_array($fixture->response->docs));
+		$this->assertEquals(0, count($fixture->response->docs));
+	}
+
+	/**
+	 * @expectedException Apache_Solr_ParserException
+	 */
+	public function testMagicGetWith0Response()
+	{
+		$fixture = self::get0Response();
+
+		// attempting to magic get a part of the response
+		// should throw a ParserException
+		$fixture->responseHeader;
+
+		$this->fail("Expected Apache_Solr_ParserException was not raised");
+	}
+
+	/**
+	 * @expectedException Apache_Solr_ParserException
+	 */
+	public function testMagicGetWith400Response()
+	{
+		$fixture = self::get400Response();
+
+		// attempting to magic get a part of the response
+		// should throw a ParserException
+		$fixture->responseHeader;
+
+		$this->fail("Expected Apache_Solr_ParserException was not raised");
+	}
+
+	/**
+	 * @expectedException Apache_Solr_ParserException
+	 */
+	public function testMagicGetWith404Response()
+	{
+		$fixture = self::get404Response();
+
+		// attempting to magic get a part of the response
+		// should throw a ParserException
+		$fixture->responseHeader;
+
+		$this->fail("Expected Apache_Solr_ParserException was not raised");
+	}
+
+	public function testCreateDocuments()
+	{
+		$fixture = self::get200ResponseWithDocuments();
+
+		$this->assertTrue(count($fixture->response->docs) > 0, 'There are not 1 or more documents, cannot test');
+		$this->assertType('Apache_Solr_Document', $fixture->response->docs[0], 'The first document is not of type Apache_Solr_Document');
+	}
+	
+	public function testDontCreateDocuments()
+	{
+		$fixture = self::get200ResponseWithDocuments(false);
+
+		$this->assertTrue(count($fixture->response->docs) > 0, 'There are not 1 or more documents, cannot test');
+		$this->assertType('stdClass', $fixture->response->docs[0], 'The first document is not of type stdClass');
+	}
+	
+	public function testGetHttpStatusMessage()
+	{
+		$fixture = self::get200Response();
+		
+		$this->assertEquals("OK", $fixture->getHttpStatusMessage());
+	}
+	
+	public function testMagicGetReturnsNullForUndefinedData()
+	{
+		$fixture = self::get200Response();
+		
+		$this->assertNull($fixture->doesnotexist);
+	}
+	
+	public function testMagicIssetForDefinedProperty()
+	{
+		$fixture = self::get200Response();
+		
+		$this->assertTrue(isset($fixture->responseHeader));
+	}
+	
+	public function testMagicIssetForUndefinedProperty()
+	{
+		$fixture = self::get200Response();
+		
+		$this->assertFalse(isset($fixture->doesnotexist));
+	}
+}

+ 47 - 0
SolrPhpClient/tests/Apache/Solr/Service/BalancerTest.php

@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_Service_Balancer Unit Tests
+ */
+class Apache_Solr_Service_BalancerTest extends Apache_Solr_ServiceAbstractTest
+{
+	public function getFixture()
+	{
+		return new Apache_Solr_Service_Balancer();
+	}
+}

+ 139 - 0
SolrPhpClient/tests/Apache/Solr/ServiceAbstractTest.php

@@ -0,0 +1,139 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Provides base funcationality test for both Apache_Solr_Service and the
+ * Apache_Solr_Service_Balancer classes. 
+ */
+abstract class Apache_Solr_ServiceAbstractTest extends PHPUnit_Framework_TestCase
+{
+	/**
+	 * Method that gets the appropriate instance for testing
+	 */
+	abstract public function getFixture();
+	
+	/**
+	 * @dataProvider testEscapeDataProvider
+	 */
+	public function testEscape($input, $expectedOutput)
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertEquals($expectedOutput, $fixture->escape($input));
+	}
+	
+	public function testEscapeDataProvider()
+	{
+		return array(
+			array(
+				"I should look the same",
+				"I should look the same"
+			),
+			
+			array(
+				"(There) are: ^lots \\ && of spec!al charaters",
+				"\\(There\\) are\\: \\^lots \\\\ \\&& of spec\\!al charaters"
+			)
+		);
+	}
+	
+	/**
+	 * @dataProvider testEscapePhraseDataProvider
+	 */
+	public function testEscapePhrase($input, $expectedOutput)
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertEquals($expectedOutput, $fixture->escapePhrase($input));
+	}
+	
+	public function testEscapePhraseDataProvider()
+	{
+		return array(
+			array(
+				"I'm a simple phrase",
+				"I'm a simple phrase"
+			),
+		
+			array(
+				"I have \"phrase\" characters",
+				'I have \\"phrase\\" characters'
+			)
+		);
+	}
+	
+	/**
+	 * @dataProvider testPhraseDataProvider
+	 */
+	public function testPhrase($input, $expectedOutput)
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertEquals($expectedOutput, $fixture->phrase($input));
+	}
+	
+	public function testPhraseDataProvider()
+	{
+		return array(
+			array(
+				"I'm a simple phrase",
+				'"I\'m a simple phrase"'
+			),
+			
+			array(
+				"I have \"phrase\" characters",
+				'"I have \\"phrase\\" characters"'
+			)
+		);
+	}
+	
+	public function testGetCreateDocumentWithDefaultConstructor()
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertTrue($fixture->getCreateDocuments());
+	}
+	
+	public function testSetCreateDocuments()
+	{
+		$fixture = $this->getFixture();
+		
+		$fixture->setCreateDocuments(false);
+		
+		$this->assertFalse($fixture->getCreateDocuments());
+	}
+}

+ 1119 - 0
SolrPhpClient/tests/Apache/Solr/ServiceTest.php

@@ -0,0 +1,1119 @@
+<?php
+/**
+ * Copyright (c) 2007-2011, Servigistics, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Servigistics, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @copyright Copyright 2007-2011 Servigistics, Inc. (http://servigistics.com)
+ * @license http://solr-php-client.googlecode.com/svn/trunk/COPYING New BSD
+ *
+ * @package Apache
+ * @subpackage Solr
+ * @author Donovan Jimenez <djimenez@conduit-it.com>
+ */
+
+/**
+ * Apache_Solr_Service Unit Test
+ */
+class Apache_Solr_ServiceTest extends Apache_Solr_ServiceAbstractTest
+{
+	public function getFixture()
+	{
+		return new Apache_Solr_Service();
+	}
+	
+	public function getMockHttpTransportInterface()
+	{
+		return $this->getMock(
+			'Apache_Solr_HttpTransport_Interface',
+			array(
+				'getDefaultTimeout',
+				'setDefaultTimeout',
+				'performGetRequest',
+				'performHeadRequest',
+				'performPostRequest',
+			)
+		);
+	}
+	
+	//================================================================//
+	// ATTEMPT TO MOVE THESE TO ServiceAbstractTest AT SOME POINT     //
+	//   Apache_Solr_Service_Balancer will need functions added       //
+	//================================================================//
+	public function testGetHttpTransportWithDefaultConstructor()
+	{
+		$fixture = new Apache_Solr_Service();
+		
+		$httpTransport = $fixture->getHttpTransport();
+		
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_Interface', $httpTransport, 'Default http transport does not implement interface');
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_FileGetContents', $httpTransport, 'Default http transport is not URL Wrapper implementation');
+	}
+	
+	
+	public function testSetHttpTransport()
+	{
+		$newTransport = new Apache_Solr_HttpTransport_Curl();
+		$fixture = new Apache_Solr_Service();
+		
+		$fixture->setHttpTransport($newTransport);
+		$httpTransport = $fixture->getHttpTransport();
+		
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_Interface', $httpTransport);
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_Curl', $httpTransport);
+		$this->assertEquals($newTransport, $httpTransport);
+		
+	}
+	
+	public function testSetHttpTransportWithConstructor()
+	{
+		$newTransport = new Apache_Solr_HttpTransport_Curl();
+		
+		$fixture = new Apache_Solr_Service('localhost', 8180, '/solr/', $newTransport);
+		
+		$fixture->setHttpTransport($newTransport);
+		$httpTransport = $fixture->getHttpTransport();
+		
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_Interface', $httpTransport);
+		$this->assertInstanceOf('Apache_Solr_HttpTransport_Curl', $httpTransport);
+		$this->assertEquals($newTransport, $httpTransport);
+	}
+
+	public function testGetCollapseSingleValueArraysWithDefaultConstructor()
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertTrue($fixture->getCollapseSingleValueArrays());
+	}
+	
+	public function testSetCollapseSingleValueArrays()
+	{
+		$fixture = $this->getFixture();
+		
+		$fixture->setCollapseSingleValueArrays(false);
+		$this->assertFalse($fixture->getCollapseSingleValueArrays());
+	}
+	
+	public function testGetNamedListTreatmetnWithDefaultConstructor()
+	{
+		$fixture = $this->getFixture();
+		
+		$this->assertEquals(Apache_Solr_Service::NAMED_LIST_MAP, $fixture->getNamedListTreatment());
+	}
+	
+	public function testSetNamedListTreatment()
+	{
+		$fixture = $this->getFixture();
+		
+		$fixture->setNamedListTreatment(Apache_Solr_Service::NAMED_LIST_FLAT);
+		$this->assertEquals(Apache_Solr_Service::NAMED_LIST_FLAT, $fixture->getNamedListTreatment());
+		
+		$fixture->setNamedListTreatment(Apache_Solr_Service::NAMED_LIST_MAP);
+		$this->assertEquals(Apache_Solr_Service::NAMED_LIST_MAP, $fixture->getNamedListTreatment());
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testSetNamedListTreatmentInvalidArgumentException()
+	{
+		$fixture = $this->getFixture();
+		
+		$fixture->setNamedListTreatment("broken");
+	}
+	
+	//================================================================//
+	// END SECTION OF CODE THAT SHOULD BE MOVED                       //
+	//   Apache_Solr_Service_Balancer will need functions added       //
+	//================================================================//
+	
+
+	public function testConstructorDefaultArguments()
+	{
+		$fixture = new Apache_Solr_Service();
+		
+		$this->assertInstanceOf('Apache_Solr_Service', $fixture);
+	}
+
+	public function testGetHostWithDefaultConstructor()
+	{
+		$fixture = new Apache_Solr_Service();
+		$host = $fixture->getHost();
+		
+		$this->assertEquals("localhost", $host);
+	}
+	
+	public function testSetHost()
+	{
+		$newHost = "example.com";
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHost($newHost);
+		$host = $fixture->getHost();
+		
+		$this->assertEquals($newHost, $host);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testSetEmptyHost()
+	{
+		$fixture = new Apache_Solr_Service();
+		
+		// should throw an invalid argument exception
+		$fixture->setHost("");
+	}
+	
+	public function testSetHostWithConstructor()
+	{
+		$newHost = "example.com";
+		
+		$fixture = new Apache_Solr_Service($newHost);
+		$host = $fixture->getHost();
+		
+		$this->assertEquals($newHost, $host);
+	}
+	
+	public function testGetPortWithDefaultConstructor()
+	{
+		$fixture = new Apache_Solr_Service();
+		$port = $fixture->getPort();
+		
+		$this->assertEquals(8180, $port);
+	}
+	
+	public function testSetPort()
+	{
+		$newPort = 12345;
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setPort($newPort);
+		$port = $fixture->getPort();
+		
+		$this->assertEquals($newPort, $port);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testSetPortWithInvalidArgument()
+	{
+		$fixture = new Apache_Solr_Service();
+		
+		$fixture->setPort("broken");
+	}
+	
+	public function testSetPortWithConstructor()
+	{
+		$newPort = 12345;
+		
+		$fixture = new Apache_Solr_Service('locahost', $newPort);
+		$port = $fixture->getPort();
+		
+		$this->assertEquals($newPort, $port);
+	}
+		
+	public function testGetPathWithDefaultConstructor()
+	{
+		$fixture = new Apache_Solr_Service();
+		$path = $fixture->getPath();
+		
+		$this->assertEquals("/solr/", $path);
+	}
+	
+	public function testSetPath()
+	{
+		$newPath = "/new/path/";
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setPath($newPath);
+		$path = $fixture->getPath();
+		
+		$this->assertEquals($path, $newPath);
+	}
+	
+	public function testSetPathWillAddContainingSlashes()
+	{
+		$newPath = "new/path";
+		$containedPath = "/{$newPath}/";
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setPath($newPath);
+		$path = $fixture->getPath();
+		
+		$this->assertEquals($containedPath, $path, 'setPath did not ensure propertly wrapped with slashes');
+	}
+	
+	public function testSetPathWithConstructor()
+	{
+		$newPath = "/new/path/";
+		
+		$fixture = new Apache_Solr_Service('localhost', 8180, $newPath);
+		$path = $fixture->getPath();
+		
+		$this->assertEquals($newPath, $path);
+	}
+	
+	
+	public function testGetDefaultTimeoutCallsThroughToTransport()
+	{
+		$fixture = new Apache_Solr_Service();
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call
+		$mockTransport->expects($this->once())->method('getDefaultTimeout');
+		
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->getDefaultTimeout();
+	}
+	
+	public function testSetDefaultTimeoutCallsThroughToTransport()
+	{
+		$timeout = 12345;
+		$fixture = new Apache_Solr_Service();
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call
+		$mockTransport->expects($this->once())->method('setDefaultTimeout')->with($this->equalTo($timeout));
+		
+		$fixture->setHttpTransport($mockTransport);		
+		$fixture->setDefaultTimeout($timeout);
+	}
+	
+	public function testPing()
+	{
+		$expectedUrl = "http://localhost:8180/solr/admin/ping";
+		$expectedTimeout = 2;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performHeadRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		// call ping 
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$time = $fixture->ping();
+		
+		$this->assertGreaterThan(0, $time);
+	}
+	
+	public function testPingReturnsFalse()
+	{
+		$expectedUrl = "http://localhost:8180/solr/admin/ping";
+		$expectedTimeout = 2;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performHeadRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get0Response()));
+		
+		// call ping 
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$this->assertFalse($fixture->ping());
+	}
+	
+	public function testThreads()
+	{
+		$expectedUrl = "http://localhost:8180/solr/admin/threads?wt=json";
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		// call threads
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$fixture->threads();
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_HttpTransportException
+	 */
+	public function testThreads404()
+	{
+		$expectedUrl = "http://localhost:8180/solr/admin/threads?wt=json";
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get404Response()));
+		
+		// call threads
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$fixture->threads();
+	}
+	
+	public function testAdd()
+	{
+		$postData = "does not have to be valid";
+		
+		$expectedUrl = "http://localhost:8180/solr/update?wt=json";
+		$expectedTimeout = false;
+		$expectedPostData = $postData;
+		$expectedContentType = "text/xml; charset=UTF-8"; // default for _sendRawPost
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($postData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		// call add
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$fixture->add($postData);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_HttpTransportException
+	 */
+	public function testAdd400()
+	{
+		$postData = "does not have to be valid";
+		
+		$expectedUrl = "http://localhost:8180/solr/update?wt=json";
+		$expectedTimeout = false;
+		$expectedPostData = $postData;
+		$expectedContentType = "text/xml; charset=UTF-8"; // default for _sendRawPost
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($postData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get400Response()));
+		
+		// call add
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$fixture->add($postData);
+	}
+	
+	public function testAddDocument()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+				
+				// raw post
+				$this->equalTo('<add allowDups="false" overwritePending="true" overwriteCommitted="true"><doc></doc></add>'),
+				
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+				
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$document = new Apache_Solr_Document();
+		
+		$fixture->addDocument($document);
+	}
+	
+	public function testAddDocumentWithNonDefaultParameters()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+				
+				// raw post
+				$this->equalTo('<add allowDups="true" overwritePending="false" overwriteCommitted="false" commitWithin="3600"><doc></doc></add>'),
+				
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+				
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$document = new Apache_Solr_Document();
+		
+		$fixture->addDocument($document, true, false, false, 3600);
+	}
+	
+	public function testAddDocumentWithFields()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+			
+				// raw post
+				$this->equalTo('<add allowDups="false" overwritePending="true" overwriteCommitted="true"><doc><field name="guid">global unique id</field><field name="field">value</field><field name="multivalue">value 1</field><field name="multivalue">value 2</field></doc></add>'),
+			
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+			
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$document = new Apache_Solr_Document();
+
+		$document->guid = "global unique id";
+		$document->field = "value";
+		$document->multivalue = array("value 1", "value 2");
+		
+		$fixture->addDocument($document);
+	}
+	
+	public function testAddDocumentWithFieldBoost()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+		
+				// raw post
+				$this->equalTo('<add allowDups="false" overwritePending="true" overwriteCommitted="true"><doc><field name="guid">global unique id</field><field name="field" boost="2">value</field><field name="multivalue" boost="3">value 1</field><field name="multivalue">value 2</field></doc></add>'),
+		
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+		
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$document = new Apache_Solr_Document();
+
+		$document->guid = "global unique id";
+		
+		$document->field = "value";
+		$document->setFieldBoost('field', 2);
+		
+		$document->multivalue = array("value 1", "value 2");
+		$document->setFieldBoost('multivalue', 3);
+		
+		$fixture->addDocument($document);
+	}
+	
+	public function testAddDocumentWithDocumentBoost()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+		
+				// raw post
+				$this->equalTo('<add allowDups="false" overwritePending="true" overwriteCommitted="true"><doc boost="2"><field name="guid">global unique id</field><field name="field">value</field></doc></add>'),
+		
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+		
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$document = new Apache_Solr_Document();
+		$document->setBoost(2);
+
+		$document->guid = "global unique id";
+		$document->field = "value";
+		
+		$fixture->addDocument($document);
+	}
+	
+	public function testAddDocuments()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+		
+				// raw post
+				$this->equalTo('<add allowDups="false" overwritePending="true" overwriteCommitted="true"><doc></doc><doc></doc></add>'),
+		
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+		
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$documents = array(
+			new Apache_Solr_Document(),
+			new Apache_Solr_Document()
+		);
+		
+		$fixture->addDocuments($documents);
+	}
+	
+	public function testAddDocumentsWithNonDefaultParameters()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+				
+				// raw post
+				$this->equalTo('<add allowDups="true" overwritePending="false" overwriteCommitted="false" commitWithin="3600"><doc></doc><doc></doc></add>'),
+				
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+				
+				// timeout
+				$this->equalTo(false)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$documents = array(
+			new Apache_Solr_Document(),
+			new Apache_Solr_Document()
+		);
+		
+		$fixture->addDocuments($documents, true, false, false, 3600);
+	}
+	
+	public function testCommit()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+				
+				// raw post
+				$this->equalTo('<commit expungeDeletes="false" waitFlush="true" waitSearcher="true" />'),
+				
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+				
+				// timeout
+				$this->equalTo(3600)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->commit();
+	}
+	
+	public function testCommitWithNonDefaultParameters()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				// url
+				$this->equalTo('http://localhost:8180/solr/update?wt=json'),
+				
+				// raw post
+				$this->equalTo('<commit expungeDeletes="true" waitFlush="false" waitSearcher="false" />'),
+				
+				// content type
+				$this->equalTo('text/xml; charset=UTF-8'),
+				
+				// timeout
+				$this->equalTo(7200)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->commit(true, false, false, 7200);
+	}
+	
+	public function testDelete()
+	{
+		$postData = "does not have to be valid";
+		
+		$expectedUrl = "http://localhost:8180/solr/update?wt=json";
+		$expectedTimeout = 3600; // default for delete
+		$expectedPostData = $postData;
+		$expectedContentType = "text/xml; charset=UTF-8"; // default for _sendRawPost
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($postData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		// call add
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		$fixture->delete($postData);
+	}
+	
+	public function testDeleteById()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->deleteById("does not exist");
+	}
+	
+	public function testDeleteByMultipleIds()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->deleteByMultipleIds(array(1, 2, 3));
+	}
+	
+	public function testDeleteByQuery()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->deleteByQuery("*:*");
+	}
+	
+	public function testExtracts()
+	{
+		$extractFile = __FILE__;
+		
+		$expectedUrl = "http://localhost:8180/solr/update/extract?resource.name=ServiceTest.php&wt=json&json.nl=map";
+		$expectedPostData = file_get_contents($extractFile);
+		$expectedContentType = 'application/octet-stream'; // default for extract
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedPostData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extract($extractFile);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testExtractWithInvalidParams()
+	{
+		$extractFile = __FILE__;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extract($extractFile, "invalid");
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testExtractFromStringWithInvalidParams()
+	{
+		$extractFileData = "does not matter what it is";
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extractFromString($extractFileData, "invalid");
+	}
+	
+	public function testExtractsWithNullParams()
+	{
+		$extractFile = __FILE__;
+		
+		$expectedUrl = "http://localhost:8180/solr/update/extract?resource.name=ServiceTest.php&wt=json&json.nl=map";
+		$expectedPostData = file_get_contents($extractFile);
+		$expectedContentType = 'application/octet-stream'; // default for extract
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedPostData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extract($extractFile, null);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testExtractWithEmptyFile()
+	{
+		$extractFile = "iDontExist.txt";
+				
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+				
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extract($extractFile);
+	}
+	
+	public function testExtractsWithDocument()
+	{
+		$extractFile = __FILE__;
+		
+		$expectedUrl = "http://localhost:8180/solr/update/extract?resource.name=ServiceTest.php&wt=json&json.nl=map&boost.field=2&literal.field=literal+value";
+		$expectedPostData = file_get_contents($extractFile);
+		$expectedContentType = 'application/octet-stream'; // default for extract
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with($this->equalTo($expectedUrl), $this->equalTo($expectedPostData), $this->equalTo($expectedContentType), $this->equalTo($expectedTimeout))
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$literals = new Apache_Solr_Document();
+		$literals->field = "literal value";
+		$literals->setFieldBoost('field', 2);
+		
+		$fixture->extract($extractFile, null, $literals);
+	}
+	
+	public function testExtractWithUrlDefers()
+	{
+		$extractUrl = "http://example.com";
+		
+		$expectedUrl = "http://localhost:8180/solr/update/extract?resource.name=http%3A%2F%2Fexample.com&wt=json&json.nl=map";
+		$expectedPostData = Apache_Solr_HttpTransport_ResponseTest::BODY_200;
+		$expectedContentType = 'application/octet-stream'; // default for extract
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->with(
+				$this->equalTo($extractUrl)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				$this->equalTo($expectedUrl),
+				$this->equalTo($expectedPostData),
+				$this->equalTo($expectedContentType),
+				$this->equalTo($expectedTimeout)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extract($extractUrl);
+	}
+	
+	public function testExtractFromUrl()
+	{
+		$extractUrl = "http://example.com";
+		
+		$expectedUrl = "http://localhost:8180/solr/update/extract?resource.name=http%3A%2F%2Fexample.com&wt=json&json.nl=map";
+		$expectedPostData = Apache_Solr_HttpTransport_ResponseTest::BODY_200;
+		$expectedContentType = 'application/octet-stream'; // default for extract
+		$expectedTimeout = false;
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->with(
+				$this->equalTo($extractUrl)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->with(
+				$this->equalTo($expectedUrl),
+				$this->equalTo($expectedPostData),
+				$this->equalTo($expectedContentType),
+				$this->equalTo($expectedTimeout)
+			)
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extractFromUrl($extractUrl);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testExtractFromUrlWithInvalidParams()
+	{
+		$extractUrl = "http://example.com";
+		
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+			
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->extractFromUrl($extractUrl, "invalid");
+	}
+	
+	public function testOptimize()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_Service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->optimize();
+	}
+	
+	public function testSearch()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->search("solr");
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testSearchWithInvalidParams()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->search("solr", 0, 10, "invalid");
+		
+		$this->fail("Should have through InvalidArgumentException");
+	}
+	
+	public function testSearchWithEmptyParams()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performGetRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->search("solr", 0, 10, null);
+	}
+	
+	public function testSearchWithPostMethod()
+	{
+		// set a mock transport
+		$mockTransport = $this->getMockHttpTransportInterface();
+		
+		// setup expected call and response
+		$mockTransport->expects($this->once())
+			->method('performPostRequest')
+			->will($this->returnValue(Apache_Solr_HttpTransport_ResponseTest::get200Response()));
+		
+		$fixture = new Apache_Solr_service();
+		$fixture->setHttpTransport($mockTransport);
+		
+		$fixture->search("solr", 0, 10, array(), Apache_Solr_Service::METHOD_POST);
+	}
+	
+	/**
+	 * @expectedException Apache_Solr_InvalidArgumentException
+	 */
+	public function testSearchWithInvalidMethod()
+	{
+		$fixture = new Apache_Solr_service();
+		
+		$fixture->search("solr", 0, 10, array(), "INVALID METHOD");
+	}
+}

+ 20 - 0
SolrPhpClient/tests/README

@@ -0,0 +1,20 @@
+Use the run.php script included in this directory to run all unit tests for the
+Solr PHP Client library. Your system will require phpunit PEAR package - which
+you can get install instructions for at:
+
+http://www.phpunit.de/
+
+To generate the code coverage report, you will also need the XDebug pecl package
+installed, typically this can be done with a simple:
+
+pecl install xdebug
+
+If you need more information on installation, then please see the official website:
+
+http://www.xdebug.org
+
+The scripts, configuration, and test files in this directory have been confirmed to
+work with the following versions:
+
+phpunit: 3.3.16
+xdebug: 2.0.4

+ 28 - 0
SolrPhpClient/tests/phpunit.bootstrap.inc

@@ -0,0 +1,28 @@
+<?php
+
+// set error reporting high
+error_reporting(E_ALL | E_STRICT);
+
+// make sure we see them
+ini_set('display_errors', 'On');
+
+// make sure current directory and class directories are on include path
+// this is necessary for auto load to work
+set_include_path(
+	// distribution files (where the zip / tgz is unpacked)
+	dirname(dirname(__FILE__)) . PATH_SEPARATOR .
+
+	// test file directory "tests"
+	dirname(__FILE__) . PATH_SEPARATOR .
+
+	// current include path (for PHPUnit, etc.)
+	get_include_path()
+);
+
+// set up an autoload for Zend / Pear style class loading
+spl_autoload_register(
+	function($class)
+	{
+		include(str_replace("_", DIRECTORY_SEPARATOR, $class) . ".php");
+	}
+);

+ 15 - 0
SolrPhpClient/tests/phpunit.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<phpunit bootstrap="phpunit.bootstrap.inc" colors="true">
+	<logging>
+		<log type="coverage-html" target="coverage-report" charset="UTF-8"/>
+		<!--<log type="testdox-text" target="testdox.txt" charset="UTF-8"/>-->
+	</logging>
+	<filter>
+		<whitelist>
+			<directory suffix=".php">../Apache</directory>
+			<exclude>
+				<file>./run.php</file>
+			</exclude>
+		</whitelist>
+	</filter>
+</phpunit>

+ 42 - 0
SolrPhpClient/tests/run.php

@@ -0,0 +1,42 @@
+#! /usr/bin/php
+<?php
+/**
+ * Copyright (c) 2007-2010, Conduit Internet Technologies, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *  - Redistributions of source code must retain the above copyright notice,
+ *    this list of conditions and the following disclaimer.
+ *  - Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  - Neither the name of Conduit Internet Technologies, Inc. nor the names of
+ *    its contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// make sure the working directory is correct (parent directory)
+// phpunit will use it to include our configuration files and find
+// the following specified test suite
+chdir(dirname(__FILE__));
+
+// run phpunit - will automatically use ./phpunit.xml for configuration
+// that configuration file points to a bootstrap that will include our test suite
+passthru("phpunit .");
+
+// extra newline so our next prompt isn't stuck appended to the output
+echo "\n";

+ 100 - 0
includes/solr_httptransport.inc

@@ -0,0 +1,100 @@
+<?php
+
+/**
+ * @file
+ * Contains the SearchApiSolrHttpTransport class.
+ */
+
+/**
+ * Drupal-based implementation of the HTTP transport interface.
+ *
+ * Uses drupal_http_request() for sending the request.
+ */
+class SearchApiSolrHttpTransport extends Apache_Solr_HttpTransport_Abstract {
+
+  /**
+   * If set, an HTTP authentification string to use.
+   *
+   * @var string
+   */
+  protected $http_auth;
+
+  /**
+   * Constructor.
+   *
+   * @param $http_auth
+   *   If set, an HTTP authentification string to use.
+   */
+  public function __construct($http_auth = NULL) {
+    $this->http_auth = $http_auth;
+  }
+
+  /**
+   * Perform a GET HTTP operation with an optional timeout and return the response
+   * contents, use getLastResponseHeaders to retrieve HTTP headers
+   *
+   * @param string $url
+   * @param float $timeout
+   * @return Apache_Solr_HttpTransport_Response HTTP response
+   */
+  public function performGetRequest($url, $timeout = false) {
+    return $this->performHttpRequest('GET', $url, $timeout);
+  }
+
+  /**
+   * Perform a HEAD HTTP operation with an optional timeout and return the response
+   * headers - NOTE: head requests have no response body
+   *
+   * @param string $url
+   * @param float $timeout
+   * @return Apache_Solr_HttpTransport_Response HTTP response
+   */
+  public function performHeadRequest($url, $timeout = false) {
+    return $this->performHttpRequest('HEAD', $url, $timeout);
+  }
+
+  /**
+   * Perform a POST HTTP operation with an optional timeout and return the response
+   * contents, use getLastResponseHeaders to retrieve HTTP headers
+   *
+   * @param string $url
+   * @param string $rawPost
+   * @param string $contentType
+   * @param float $timeout
+   * @return Apache_Solr_HttpTransport_Response HTTP response
+   */
+  public function performPostRequest($url, $rawPost, $contentType, $timeout = false) {
+    return $this->performHttpRequest('POST', $url, $timeout, $rawPost, $contentType);
+  }
+
+  /**
+   * Helper method for making an HTTP request.
+   */
+  protected function performHttpRequest($method, $url, $timeout, $rawPost = NULL, $contentType = NULL) {
+    $options = array(
+      'method' => $method,
+      'timeout' => $timeout && $timeout > 0 ? $timeout : $this->getDefaultTimeout(),
+      'headers' => array(),
+    );
+
+    if ($this->http_auth) {
+      $options['headers']['Authorization'] = $this->http_auth;
+    }
+    if ($timeout) {
+      $options['timeout'] = $timeout;
+    }
+    if ($rawPost) {
+      $options['data'] = $rawPost;
+    }
+    if ($contentType) {
+      $options['headers']['Content-Type'] = $contentType;
+    }
+
+    $response = drupal_http_request($url, $options);
+
+    $type = isset($response->headers['content-type']) ? $response->headers['content-type'] : 'text/xml';
+    $body = isset($response->data) ? $response->data : NULL;
+    return new Apache_Solr_HttpTransport_Response($response->code, $type, $body);
+  }
+
+}

+ 33 - 0
includes/spellcheck.inc

@@ -0,0 +1,33 @@
+<?php
+/**
+ * @file
+ * Contains the SearchApiSpellcheckSolr class.
+ */
+
+/**
+ * Spellcheck class which can provide spelling suggestions. The constructor
+ * populates the instance with any suggestions returned by Solr.
+ */
+class SearchApiSpellcheckSolr extends SearchApiSpellcheck {
+
+  /**
+   * Constructor.
+   *
+   * If solr has returned spelling suggestion then loop through them and add
+   * them to this spellcheck service.
+   *
+   * @param Apache_Solr_Response $response
+   *   The Solr response object.
+   */
+  function __construct(Apache_Solr_Response $response) {
+    if (isset($response->spellcheck->suggestions)) {
+      $suggestions = $response->spellcheck->suggestions;
+      foreach ($suggestions as $word => $data) {
+        foreach ($data->suggestion as $suggestion) {
+          $this->addSuggestion(new SearchApiSpellcheckSuggestion($word, $suggestion));
+        }
+      }
+    }
+  }
+
+}

+ 89 - 0
search_api_solr.api.php

@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @file
+ * Hooks provided by the Search API Solr search module.
+ */
+
+/**
+ * @addtogroup hooks
+ * @{
+ */
+
+/**
+ * Lets modules alter a Solr search request before sending it.
+ *
+ * Apache_Solr_Service::search() is called afterwards with these parameters.
+ * Please see this method for details on what should be altered where and what
+ * is set afterwards.
+ *
+ * @param array $call_args
+ *   An associative array containing all four arguments to the
+ *   Apache_Solr_Service::search() call ("query", "offset", "limit" and
+ *   "params") as references.
+ * @param SearchApiQueryInterface $query
+ *   The SearchApiQueryInterface object representing the executed search query.
+ */
+function hook_search_api_solr_query_alter(array &$call_args, SearchApiQueryInterface $query) {
+  if ($query->getOption('foobar')) {
+    $call_args['params']['foo'] = 'bar';
+  }
+}
+
+/**
+ * Change the way the index's field names are mapped to Solr field names.
+ *
+ * @param $index
+ *   The index whose field mappings are altered.
+ * @param array $fields
+ *   An associative array containing the index field names mapped to their Solr
+ *   counterparts. The special fields 'search_api_id' and 'search_api_relevance'
+ *   are also included.
+ */
+function hook_search_api_solr_field_mapping_alter(SearchApiIndex $index, array &$fields) {
+  if ($index->entity_type == 'node' && isset($fields['body:value'])) {
+    $fields['body:value'] = 'text';
+  }
+}
+
+/**
+ * Lets modules alter the search results returned from a Solr search, based on
+ * the original Solr response.
+ *
+ * @param array $results
+ *   The results array that will be returned for the search.
+ * @param SearchApiQueryInterface $query
+ *   The SearchApiQueryInterface object representing the executed search query.
+ * @param Apache_Solr_Response $response
+ *   The response object returned by Solr.
+ */
+function hook_search_api_solr_search_results_alter(array &$results, SearchApiQueryInterface $query, Apache_Solr_Response $response) {
+  if (isset($response->facet_counts->facet_fields->custom_field)) {
+    // Do something with $results.
+  }
+}
+
+/**
+ * Lets modules alter a Solr search request for a multi-index search before
+ * sending it.
+ *
+ * Apache_Solr_Service::search() is called afterwards with these parameters.
+ * Please see this method for details on what should be altered where and what
+ * is set afterwards.
+ *
+ * @param array $call_args
+ *   An associative array containing all four arguments to the
+ *   Apache_Solr_Service::search() call ("query", "offset", "limit" and
+ *   "params") as references.
+ * @param SearchApiMultiQueryInterface $query
+ *   The object representing the executed search query.
+ */
+function hook_search_api_solr_multi_query_alter(array &$call_args, SearchApiMultiQueryInterface $query) {
+  if ($query->getOption('foobar')) {
+    $call_args['params']['foo'] = 'bar';
+  }
+}
+
+/**
+ * @} End of "addtogroup hooks".
+ */

+ 18 - 0
search_api_solr.info

@@ -0,0 +1,18 @@
+name = Solr search
+description = Offers an implementation of the Search API that uses an Apache Solr server for indexing content.
+dependencies[] = search_api
+core = 7.x
+package = Search
+
+files[] = service.inc
+files[] = solr_connection.inc
+files[] = solr_field.inc
+files[] = includes/solr_httptransport.inc
+files[] = includes/spellcheck.inc
+
+; Information added by drupal.org packaging script on 2013-01-07
+version = "7.x-1.0-rc3"
+core = "7.x"
+project = "search_api_solr"
+datestamp = "1357517056"
+

+ 154 - 0
search_api_solr.install

@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * Implements hook_requirements().
+ */
+function search_api_solr_requirements($phase) {
+  if ($phase == 'install') {
+    $t = get_t();
+    module_load_include('module', 'search_api_solr');
+    spl_autoload_register('_search_api_solr_autoload');
+    if (class_exists('Apache_Solr_Service')) {
+      $version = trim(Apache_Solr_Service::SVN_REVISION, '$ :A..Za..z');
+      if ($version < 59) {
+        return array(
+          'search_api_solr' => array(
+            'title' => $t('Solr PHP library'),
+            'value' => $t('The library is correctly installed, but out of date'),
+            'description' => $t('It is suggested to install the newest version (@version).', array('@version' => 'r60')),
+            'severity' => REQUIREMENT_WARNING,
+          ),
+        );
+      }
+      return array(
+        'search_api_solr' => array(
+          'title' => $t('Solr PHP library'),
+          'value' => $t('The library was correctly installed'),
+          'severity' => REQUIREMENT_OK,
+        ),
+      );
+    }
+    else {
+      return array(
+        'search_api_solr' => array(
+          'title' => $t('Solr PHP library'),
+          'value' => $t('The library was not correctly installed. Please see INSTALL.txt for instructions.'),
+          'severity' => REQUIREMENT_ERROR,
+        ),
+      );
+    }
+  }
+  elseif ($phase == 'runtime') {
+    $servers = search_api_server_load_multiple(FALSE, array('class' => 'search_api_solr_service', 'enabled' => TRUE));
+    $count = 0;
+    $unavailable = 0;
+    $last = NULL;
+    foreach ($servers as $server) {
+      if (!$server->ping()) {
+        ++$unavailable;
+        $last = $server;
+      }
+      ++$count;
+    }
+    if (!$count) {
+      return array();
+    }
+    $ret['search_api_solr'] = array(
+      'title' => t('Solr servers'),
+      'value' => format_plural($count, '1 server', '@count servers'),
+    );
+    if ($unavailable) {
+      if ($unavailable == 1) {
+        $ret['search_api_solr']['description'] = t('The Solr server of <a href="!url">%name</a> could not be reached.',
+            array('!url' => url('admin/config/search/search_api/server/' . $last->machine_name), '%name' => $last->name));
+      }
+      else {
+        $ret['search_api_solr']['description'] = t('@count Solr servers could not be reached.', array('@count' => $unavailable));
+      }
+      $ret['search_api_solr']['severity'] = REQUIREMENT_ERROR;
+    }
+    else {
+      $ret['search_api_solr']['description'] = format_plural($count, 'The Solr server could be reached.', 'All @count Solr servers could be reached.');
+      $ret['search_api_solr']['severity'] = REQUIREMENT_OK;
+    }
+
+    // Check version of the SolrPhpClient library.
+    $version = trim(Apache_Solr_Service::SVN_REVISION, '$ :A..Za..z');
+    if ($version < 59) {
+      $ret['search_api_solr_client'] = array(
+        'title' => t('Solr PHP library'),
+        'value' => t('Version @version', array('@version' => "r$version")),
+        'description' => t('The library is correctly installed, but out of date. ' .
+            'It is suggested to install the <a href="@url">newest version</a> (@version).',
+            array('@url' => 'http://code.google.com/p/solr-php-client/downloads/list', '@version' => 'r60')),
+        'severity' => REQUIREMENT_WARNING,
+      );
+    }
+    return $ret;
+  }
+}
+
+/**
+ * Implements hook_install().
+ *
+ * We register our autoloader here because our hook_init() won't get called
+ * until the next bootstrap (it registers the autoloader too.)
+ */
+function search_api_solr_install() {
+  spl_autoload_register('_search_api_solr_autoload');
+}
+
+/**
+ * Implements hook_uninstall().
+ */
+function search_api_solr_uninstall() {
+  if (module_exists('search_api')) {
+    db_delete('search_api_server')
+      ->condition('class', 'search_api_solr_service')
+      ->execute();
+  }
+  variable_del('search_api_solr_last_optimize');
+  variable_del('search_api_solr_autocomplete_max_occurrences');
+}
+
+/**
+ * Implements hook_update_dependencies().
+ */
+function search_api_solr_update_dependencies() {
+  // This update should run after primary IDs have been changed to machine names in the framework.
+  $dependencies['search_api_solr'][7101] = array(
+    'search_api' => 7102,
+  );
+  return $dependencies;
+}
+
+/**
+ * Implements hook_update_N().
+ *
+ * Implements transition from using the index IDs to using machine names.
+ */
+function search_api_solr_update_7101() {
+  foreach (search_api_server_load_multiple(FALSE, array('class' => 'search_api_solr_service')) as $server) {
+    if ($server->enabled) {
+      $server->deleteItems('all');
+    }
+    else {
+      $tasks = variable_get('search_api_tasks', array());
+      $tasks[$server->machine_name][''] = array('clear all');
+      variable_set('search_api_tasks', $tasks);
+    }
+    $query = db_select('search_api_index', 'i')
+      ->fields('i', array('machine_name'))
+      ->condition('server', $server->machine_name);
+    db_update('search_api_item')
+      ->fields(array(
+        'changed' => REQUEST_TIME,
+      ))
+      ->condition('index_id', $query, 'IN')
+      ->execute();
+  }
+
+  return t('The Solr search module was updated. ' .
+      'Please stop your Solr servers, replace their schema.xml with the new version and then start them again. ' .
+      'All data indexed on Solr servers will have to be reindexed.');
+}

+ 145 - 0
search_api_solr.module

@@ -0,0 +1,145 @@
+<?php
+/**
+ * @file
+ * Provides a Solr-based service class for the Search API.
+ */
+
+/**
+ * Implements hook_init().
+ */
+function search_api_solr_init() {
+  spl_autoload_register('_search_api_solr_autoload');
+}
+
+/**
+ * Return path to SolrPhpClient library path, or FALSE if not found.
+ */
+function _search_api_solr_solrphpclient_path() {
+  static $path = NULL;
+
+  if (!isset($path)) {
+    $path = FALSE;
+    // If Libraries API is installed, we first use that to try and find the
+    // library. Otherwise we manually check a few locations.
+    $search_dirs = array();
+    if (function_exists('libraries_get_path')) {
+      $dir = libraries_get_path('SolrPhpClient');
+      // Confusingly, Libraries API 1.x will return sites/all/libraries/NAME on
+      // failure, while Libraries API 2.x returns FALSE in that case.
+      if ($dir) {
+        $search_dirs[] = $dir;
+      }
+    }
+    else {
+      // Include libraries + current profile folders in searched directories.
+      $search_dirs[] = 'sites/all/libraries/SolrPhpClient';
+      $search_dirs[] = 'profiles/' . drupal_get_profile() . '/libraries/SolrPhpClient';
+    }
+    $search_dirs[] = drupal_get_path('module', 'search_api_solr') . '/SolrPhpClient';
+    foreach ($search_dirs as $dir) {
+      $dir = DRUPAL_ROOT . '/' . $dir;
+      if (is_dir($dir)) {
+        $path = $dir;
+        break;
+      }
+    }
+  }
+
+  if ($path == FALSE) {
+    throw new Exception('SolrPhpClient library not found! Please follow the instructions in search_api_solr/INSTALL.txt for installing the Solr search module.');
+  }
+
+  return $path;
+}
+
+/**
+ * Autoloader for the SolrPhpClient classes.
+ */
+function _search_api_solr_autoload($name) {
+  static $lookup_cache = array();
+
+  if (isset($lookup_cache[$name])) {
+    return $lookup_cache[$name];
+  }
+  elseif (substr($name, 0, 11) == 'Apache_Solr') {
+    $path = _search_api_solr_solrphpclient_path();
+    if (file_exists($file_path = $path . '/' . str_replace('_', '/', $name) . '.php')) {
+      require_once $file_path;
+      $lookup_cache[$name] = TRUE;
+      return TRUE;
+    }
+  }
+  $lookup_cache[$name] = FALSE;
+  return FALSE;
+}
+
+/**
+ * Implements hook_search_api_service_info().
+ */
+function search_api_solr_search_api_service_info() {
+  $services['search_api_solr_service'] = array(
+    'name' => t('Solr service'),
+    'description' => t('<p>Index items using an Apache Solr search server.</p>' .
+        '<ul>' . '<li>All field types are supported and indexed in a special way, with URI/String and Integer/Duration being equivalent.</li>' .
+        '<li>See <a href="@url">the Solr wiki</a> for information about the "direct" parse mode.</li>' .
+        '<li>Supports the search_api_facets and search_api_multi features.</li>' .
+        '<li>Will use internal Solr preprocessors, so Search API preprocessors should for the most part be deactivated.</li>' .
+        '<li>See the README.txt file provided with this module for details.</li>' . '</ul>',
+        array('@url' => url('http://wiki.apache.org/solr/SolrQuerySyntax'))),
+    'class' => 'SearchApiSolrService',
+  );
+  return $services;
+}
+
+/**
+ * Implements hook_help().
+ */
+function search_api_solr_help($path, array $arg = array()) {
+  if ($path == 'admin/config/search/search_api') {
+    // Included because we need the REQUIREMENT_* constants.
+    include_once(DRUPAL_ROOT . '/includes/install.inc');
+    module_load_include('install', 'search_api_solr');
+    $reqs = search_api_solr_requirements('runtime');
+    foreach ($reqs as $req) {
+      if (isset($req['description'])) {
+        $type = $req['severity'] == REQUIREMENT_ERROR ? 'error' : ($req['severity'] == REQUIREMENT_WARNING ? 'warning' : 'status');
+        drupal_set_message($req['description'], $type);
+      }
+    }
+  }
+  elseif ($path == 'admin/config/search/search_api/server/%' && !empty($arg[5])) {
+    $server = search_api_server_load($arg[5]);
+    if ($server && $server->enabled && $server->class == 'search_api_solr_service') {
+      $ping = $server->ping();
+      $type = $ping ? 'status' : 'error';
+      if ($ping) {
+        $msg = t('The Solr server could be reached (latency: @millisecs ms).', array('@millisecs' => $ping * 1000));
+      }
+      else {
+        $msg = t('The Solr server could not be reached.');
+      }
+      drupal_set_message($msg, $type);
+    }
+  }
+}
+
+/**
+ * Implements hook_cron().
+ *
+ * Used to execute an optimization operation on all enabled Solr servers once a
+ * day.
+ */
+function search_api_solr_cron() {
+  if (REQUEST_TIME - variable_get('search_api_solr_last_optimize', 0) > 86400) {
+    variable_set('search_api_solr_last_optimize', REQUEST_TIME);
+    $conditions = array('class' => 'search_api_solr_service', 'enabled' => TRUE);
+    foreach (search_api_server_load_multiple(FALSE, $conditions) as $server) {
+      try {
+        $server->getSolrConnection()->optimize(FALSE, FALSE);
+      }
+      catch(Exception $e) {
+        watchdog_exception('search_api_solr', $e, '%type while optimizing Solr server @server: !message in %function (line %line of %file).', array('@server' => $server->name));
+      }
+    }
+  }
+}

+ 1655 - 0
service.inc

@@ -0,0 +1,1655 @@
+<?php
+
+/**
+ * Search service class using Solr server.
+ */
+class SearchApiSolrService extends SearchApiAbstractService {
+
+  /**
+   * The date format that Solr uses, in PHP date() syntax.
+   */
+  const SOLR_DATE_FORMAT = 'Y-m-d\TH:i:s\Z';
+
+  /**
+   * A connection to the Solr server.
+   *
+   * @var SearchApiSolrConnection
+   */
+  protected $solr;
+
+  /**
+   * An array of all recognized types mapped to a prefix used for identifying
+   * them in the Solr schema.
+   *
+   * @var array
+   */
+  protected static $type_prefixes = array(
+    'text' => 'tm',
+    'tokens' => 'tm',
+    'string' => 's',
+    'integer' => 'i',
+    'decimal' => 'f',
+    'date' => 'd',
+    'duration' => 'i',
+    'boolean' => 'b',
+    'uri' => 's',
+    'location' => 'loc',
+    'geohash' => 'geohash',
+  );
+
+  /**
+   * @var array
+   */
+  protected $fieldNames = array();
+
+  /**
+   * Metadata describing fields on the Solr/Lucene index.
+   *
+   * @see SearchApiSolrService::getFields().
+   *
+   * @var array
+   */
+  protected $fields;
+
+  /**
+   * Saves whether a commit operation was already scheduled for this server.
+   *
+   * @var boolean
+   */
+  protected $commitScheduled = FALSE;
+
+  /**
+   * Request handler to use for this search query.
+   *
+   * @var string
+   */
+  protected $request_handler = NULL;
+
+  public function __construct(SearchApiServer $server) {
+    parent::__construct($server);
+  }
+
+  public function configurationForm(array $form, array &$form_state) {
+    if ($this->options) {
+      // Editing this server
+      $url = 'http://' . $this->options['host'] . ':' . $this->options['port'] . $this->options['path'];
+      $form['server_description'] = array(
+        '#type' => 'item',
+        '#title' => t('Solr server URI'),
+        '#description' => l($url, $url),
+      );
+    }
+
+    $options = $this->options + array(
+      'host' => 'localhost',
+      'port' => '8983',
+      'path' => '/solr',
+      'http_user' => '',
+      'http_pass' => '',
+      'excerpt' => FALSE,
+      'retrieve_data' => FALSE,
+      'highlight_data' => FALSE,
+      'http_method' => Apache_Solr_Service::METHOD_POST,
+      'autocorrect_spell' => TRUE,
+      'autocorrect_suggest_words' => TRUE,
+    );
+
+    $form['host'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Solr host'),
+      '#description' => t('The host name or IP of your Solr server, e.g. <code>localhost</code> or <code>www.example.com</code>.'),
+      '#default_value' => $options['host'],
+      '#required' => TRUE,
+    );
+    $form['port'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Solr port'),
+      '#description' => t('The Jetty example server is at port 8983, while Tomcat uses 8080 by default.'),
+      '#default_value' => $options['port'],
+      '#required' => TRUE,
+    );
+    $form['path'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Solr path'),
+      '#description' => t('The path that identifies the Solr instance to use on the server.'),
+      '#default_value' => $options['path'],
+    );
+
+    $form['http'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Basic HTTP authentication'),
+      '#description' => t('If your Solr server is protected by basic HTTP authentication, enter the login data here.'),
+      '#collapsible' => TRUE,
+      '#collapsed' => empty($options['http_user']),
+    );
+    $form['http']['http_user'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Username'),
+      '#default_value' => $options['http_user'],
+    );
+    $form['http']['http_pass'] = array(
+      '#type' => 'password',
+      '#title' => t('Password'),
+      '#default_value' => $options['http_pass'],
+    );
+
+    $form['advanced'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Advanced'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+    );
+    $form['advanced']['excerpt'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Return an excerpt for all results'),
+      '#description' => t("If search keywords are given, use Solr's capabilities to create a highlighted search excerpt for each result. " .
+          'Whether the excerpts will actually be displayed depends on the settings of the search, though.'),
+      '#default_value' => $options['excerpt'],
+    );
+    $form['advanced']['retrieve_data'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Retrieve result data from Solr'),
+      '#description' => t('When checked, result data will be retrieved directly from the Solr server. ' .
+          'This might make item loads unnecessary. Only indexed fields can be retrieved. ' .
+          'Note also that the returned field data might not always be correct, due to preprocessing and caching issues.'),
+      '#default_value' => $options['retrieve_data'],
+    );
+    $form['advanced']['highlight_data'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Highlight retrieved data'),
+      '#description' => t('When retrieving result data from the Solr server, try to highlight the search terms in the returned fulltext fields.'),
+      '#default_value' => $options['highlight_data'],
+    );
+    // Highlighting retrieved data only makes sense when we retrieve data.
+    // (Actually, internally it doesn't really matter. However, from a user's
+    // perspective, having to check both probably makes sense.)
+    $form['advanced']['highlight_data']['#states']['invisible']
+        [':input[name="options[form][advanced][retrieve_data]"]']['checked'] = FALSE;
+
+    $form['advanced']['http_method'] = array(
+      '#type' => 'select',
+      '#title' => t('HTTP method'),
+      '#description' => t('The HTTP method to use for sending queries. Usually, POST will work fine in all cases.'),
+      '#default_value' => $options['http_method'],
+      '#options' => array(
+        Apache_Solr_Service::METHOD_POST => 'POST',
+        Apache_Solr_Service::METHOD_GET => 'GET',
+      ),
+    );
+
+    if (module_exists('search_api_autocomplete')) {
+      $form['advanced']['autocomplete'] = array(
+        '#type' => 'fieldset',
+        '#title' => t('Autocomplete'),
+        '#collapsible' => TRUE,
+        '#collapsed' => TRUE,
+      );
+      $form['advanced']['autocomplete']['autocorrect_spell'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Use spellcheck for autocomplete suggestions'),
+        '#description' => t('If activated, spellcheck suggestions ("Did you mean") will be included in the autocomplete suggestions. Since the used dictionary contains words from all indexes, this might lead to leaking of sensitive data, depending on your setup.'),
+        '#default_value' => $options['autocorrect_spell'],
+      );
+      $form['advanced']['autocomplete']['autocorrect_suggest_words'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Suggest additional words'),
+        '#description' => t('If activated and the user enters a complete word, Solr will suggest additional words the user wants to search, which are often found (not searched!) together. This has been known to lead to strange results in some configurations – if you see inappropriate additional-word suggestions, you might want to deactivate this option.'),
+        '#default_value' => $options['autocorrect_suggest_words'],
+      );
+    }
+
+    return $form;
+  }
+
+  public function configurationFormValidate(array $form, array &$values, array &$form_state) {
+    if (isset($values['port']) && (!is_numeric($values['port']) || $values['port'] < 0 || $values['port'] > 65535)) {
+      form_error($form['port'], t('The port has to be an integer between 0 and 65535.'));
+    }
+  }
+
+  public function configurationFormSubmit(array $form, array &$values, array &$form_state) {
+    // Since the form is nested into another, we can't simply use #parents for
+    // doing this array restructuring magic. (At least not without creating an
+    // unnecessary dependency on internal implementation.)
+    $values += $values['http'];
+    $values += $values['advanced'];
+    $values += !empty($values['autocomplete']) ? $values['autocomplete'] : array();
+    unset($values['http'], $values['advanced'], $values['autocomplete']);
+    // Highlighting retrieved data only makes sense when we retrieve data.
+    $values['highlight_data'] &= $values['retrieve_data'];
+
+    parent::configurationFormSubmit($form, $values, $form_state);
+  }
+
+  public function supportsFeature($feature) {
+    $supported = drupal_map_assoc(array(
+      'search_api_autocomplete',
+      'search_api_facets',
+      'search_api_facets_operator_or',
+      'search_api_mlt',
+      'search_api_multi',
+      'search_api_spellcheck',
+      'search_api_data_type_location',
+      'search_api_data_type_geohash',
+    ));
+    return isset($supported[$feature]);
+  }
+
+  /**
+   * View this server's settings.
+   */
+  public function viewSettings() {
+    $output = '';
+    $options = $this->options;
+
+    $url = 'http://' . $options['host'] . ':' . $options['port'] . $options['path'];
+    $output .= "<dl>\n  <dt>";
+    $output .= t('Solr server URI');
+    $output .= "</dt>\n  <dd>";
+    $output .= l($url, $url);
+    $output .= '</dd>';
+    if ($options['http_user']) {
+      $output .= "\n  <dt>";
+      $output .= t('Basic HTTP authentication');
+      $output .= "</dt>\n  <dd>";
+      $output .= t('Username: @user', array('@user' => $options['http_user']));
+      $output .= "</dd>\n  <dd>";
+      $output .= t('Password: @pass', array('@pass' => str_repeat('*', strlen($options['http_pass']))));
+      $output .= '</dd>';
+    }
+    $output .= "\n</dl>";
+
+    return $output;
+  }
+
+  /**
+   * Create a connection to the Solr server as configured in $this->options.
+   */
+  protected function connect() {
+    if (!$this->solr) {
+      if (!class_exists('Apache_Solr_Service')) {
+        throw new Exception(t('SolrPhpClient library not found! Please follow the instructions in search_api_solr/INSTALL.txt for installing the Solr search module.'));
+      }
+      $this->solr = new SearchApiSolrConnection($this->options);
+    }
+  }
+
+  public function addIndex(SearchApiIndex $index) {
+    if (module_exists('search_api_multi') && module_exists('search_api_views')) {
+      views_invalidate_cache();
+    }
+  }
+
+  public function fieldsUpdated(SearchApiIndex $index) {
+    if (module_exists('search_api_multi') && module_exists('search_api_views')) {
+      views_invalidate_cache();
+    }
+    return TRUE;
+  }
+
+  public function removeIndex($index) {
+    if (module_exists('search_api_multi') && module_exists('search_api_views')) {
+      views_invalidate_cache();
+    }
+    $id = is_object($index) ? $index->machine_name : $index;
+    // Only delete the index's data if the index isn't read-only.
+    if (!is_object($index) || empty($index->read_only)) {
+      try {
+        $this->connect();
+        $this->solr->deleteByQuery("index_id:" . $id);
+      }
+      catch (Exception $e) {
+        watchdog_exception('search_api_solr', $e, "%type while deleting an index's data: !message in %function (line %line of %file).");
+      }
+    }
+  }
+
+  public function indexItems(SearchApiIndex $index, array $items) {
+    $documents = array();
+    $ret = array();
+    $index_id = $index->machine_name;
+    $fields = $this->getFieldNames($index);
+
+    foreach ($items as $id => $item) {
+      try {
+        $doc = new Apache_Solr_Document();
+        $doc->setField('id', $this->createId($index_id, $id));
+        $doc->setField('index_id', $index_id);
+        $doc->setField('item_id', $id);
+
+        foreach ($item as $key => $field) {
+          if (!isset($fields[$key])) {
+            throw new SearchApiException(t('Unknown field @field.', array('@field' => $key)));
+          }
+          $this->addIndexField($doc, $fields[$key], $field['value'], $field['type']);
+        }
+
+        $documents[] = $doc;
+        $ret[] = $id;
+      }
+      catch (Exception $e) {
+        watchdog_exception('search_api_solr', $e, "%type while indexing @type with ID @id: !message in %function (line %line of %file).", array('@type' => $index->item_type, '@id' => $id), WATCHDOG_WARNING);
+      }
+    }
+
+    if (!$documents) {
+      return array();
+    }
+    try {
+      $this->connect();
+      $response = $this->solr->addDocuments($documents);
+      if ($response->getHttpStatus() == 200) {
+        if (!empty($index->options['index_directly'])) {
+          $this->scheduleCommit();
+        }
+        return $ret;
+      }
+      throw new SearchApiException(t('HTTP status @status: @msg.',
+          array('@status' => $response->getHttpStatus(), '@msg' => $response->getHttpStatusMessage())));
+    }
+    catch (Exception $e) {
+      watchdog_exception('search_api_solr', $e, "%type while indexing: !message in %function (line %line of %file).");
+    }
+    return array();
+  }
+
+  /**
+   * Creates an ID used as the unique identifier at the Solr server. This has to
+   * consist of both index and item ID.
+   */
+  protected function createId($index_id, $item_id) {
+    return "$index_id-$item_id";
+  }
+
+  /**
+   * Create a list of all indexed field names mapped to their Solr field names.
+   *
+   * The special fields "search_api_id", "search_api_relevance", and "id" are
+   * also included. Any Solr fields that exist on search results are mapped back
+   * to their local field names in the final result set.
+   *
+   * @see SearchApiSolrService::search()
+   */
+  public function getFieldNames(SearchApiIndex $index, $reset = FALSE) {
+    if (!isset($this->fieldNames[$index->machine_name]) || $reset) {
+      // This array maps "local property name" => "solr doc property name".
+      $ret = array(
+        'search_api_id' => 'ss_search_api_id',
+        'search_api_relevance' => 'score',
+        'search_api_item_id' => 'item_id',
+      );
+
+      // Add the names of any fields configured on the index.
+      $fields = (isset($index->options['fields']) ? $index->options['fields'] : array());
+      foreach ($fields as $key => $field) {
+        // Generate a field name; this corresponds with naming conventions in
+        // our schema.xml
+        $type = $field['type'];
+
+        // Use the real type of the field if the server supports this type.
+        if (isset($field['real_type'])) {
+          $custom_type = search_api_extract_inner_type($field['real_type']);
+          if ($this->supportsFeature('search_api_data_type_' . $custom_type)) {
+            $type = $field['real_type'];
+          }
+        }
+
+        $inner_type = search_api_extract_inner_type($type);
+        $pref = isset(self::$type_prefixes[$inner_type]) ? self::$type_prefixes[$inner_type] : '';
+        if ($pref != 'tm') {
+          $pref .= $type == $inner_type ? 's' : 'm';
+        }
+        $name = $pref . '_' . $key;
+
+        $ret[$key] = $name;
+      }
+
+      // Let modules adjust the field mappings.
+      drupal_alter('search_api_solr_field_mapping', $index, $ret);
+
+      $this->fieldNames[$index->machine_name] = $ret;
+    }
+
+    return $this->fieldNames[$index->machine_name];
+  }
+
+  /**
+   * Helper method for indexing.
+   * Add $field with field name $key to the document $doc. The format of $field
+   * is the same as specified in SearchApiServiceInterface::indexItems().
+   */
+  protected function addIndexField(Apache_Solr_Document $doc, $key, $value, $type, $multi_valued = FALSE) {
+    // Don't index empty values (i.e., when field is missing)
+    if (!isset($value)) {
+      return;
+    }
+    if (search_api_is_list_type($type)) {
+      $type = substr($type, 5, -1);
+      foreach ($value as $v) {
+        $this->addIndexField($doc, $key, $v, $type, TRUE);
+      }
+      return;
+    }
+    switch ($type) {
+      case 'tokens':
+        foreach ($value as $v) {
+          $doc->addField($key, $v['value']);
+        }
+        return;
+      case 'boolean':
+        $value = $value ? 'true' : 'false';
+        break;
+      case 'date':
+        $value = is_numeric($value) ? (int) $value : strtotime($value);
+        if ($value === FALSE) {
+          return;
+        }
+        $value = format_date($value, 'custom', self::SOLR_DATE_FORMAT, 'UTC');
+        break;
+      case 'integer':
+        $value = (int) $value;
+        break;
+      case 'decimal':
+        $value = (float) $value;
+        break;
+    }
+    if ($multi_valued) {
+      $doc->addField($key, $value);
+    }
+    else {
+      $doc->setField($key, $value);
+    }
+  }
+
+  /**
+   * Delete items from an index on this server.
+   *
+   * This method has a custom, Solr-specific extension:
+   * If $ids is a string other than "all", it is treated as a Solr query. All
+   * items matching that Solr query are then deleted. If $index is additionally
+   * specified, then only those items also lying on that index will be deleted.
+   * It is up to the caller to ensure $ids is a valid query when the method is
+   * called in this fashion.
+   */
+  public function deleteItems($ids = 'all', SearchApiIndex $index = NULL) {
+    try {
+      $this->connect();
+      if ($index) {
+        $index_id = $index->machine_name;
+        if (is_array($ids)) {
+          $solr_ids = array();
+          foreach ($ids as $id) {
+            $solr_ids[] = $this->createId($index_id, $id);
+          }
+          $this->solr->deleteByMultipleIds($solr_ids);
+        }
+        elseif ($ids == 'all') {
+          $this->solr->deleteByQuery("index_id:" . $index_id);
+        }
+        else {
+          $this->solr->deleteByQuery("index_id:" . $index_id . ' (' . $ids . ')');
+        }
+      }
+      else {
+        $q = $ids == 'all' ? '*:*' : $ids;
+        $this->solr->deleteByQuery($q);
+      }
+      $this->scheduleCommit();
+    }
+    catch(Exception $e) {
+      watchdog_exception('search_api_solr', $e, '%type while deleting items from server @server: !message in %function (line %line of %file).', array('@server' => $this->server->name));
+    }
+  }
+
+  public function search(SearchApiQueryInterface $query) {
+    $time_method_called = microtime(TRUE);
+    // Reset request handler
+    $this->request_handler = NULL;
+    // Get field information
+    $index = $query->getIndex();
+    $fields = $this->getFieldNames($index);
+
+    // Extract keys
+    $keys = $query->getKeys();
+    if (is_array($keys)) {
+      $keys = $this->flattenKeys($keys);
+    }
+
+    // Set searched fields
+    $options = $query->getOptions();
+    $search_fields = $query->getFields();
+    // Get the index fields to be able to retrieve boosts.
+    $index_fields = $index->getFields();
+    $qf = array();
+    foreach ($search_fields as $f) {
+      $boost = '';
+      $boost = isset($index_fields[$f]['boost']) ? '^' . $index_fields[$f]['boost'] : '';
+      $qf[] = $fields[$f] . $boost;
+    }
+
+    // Extract filters
+    $filter = $query->getFilter();
+    $fq = $this->createFilterQueries($filter, $fields, $index->options['fields']);
+    $fq[] = 'index_id:' . $index->machine_name;
+
+    // Extract sort
+    $sort = array();
+    foreach ($query->getSort() as $f => $order) {
+      $f = $fields[$f];
+      if (substr($f, 0, 3) == 'ss_') {
+        $f = 'sort_' . substr($f, 3);
+      }
+      $order = strtolower($order);
+      $sort[] = "$f $order";
+    }
+
+    // Get facet fields
+    $facets = $query->getOption('search_api_facets', array());
+    $facet_params = $this->getFacetParams($facets, $fields, $fq);
+
+    // Handle highlighting
+    $highlight_params = $this->getHighlightParams($query);
+
+    // Handle More Like This query
+    $mlt = $query->getOption('search_api_mlt');
+    if ($mlt) {
+      $mlt_params['qt'] = 'mlt';
+      // The fields to look for similarities in.
+      $mlt_fl = array();
+      foreach($mlt['fields'] as $f) {
+        $mlt_fl[] = $fields[$f];
+        // For non-text fields, set minimum word length to 0.
+        if (isset($index->options['fields'][$f]['type']) && !search_api_is_text_type($index->options['fields'][$f]['type'])) {
+          $mlt_params['f.' . $fields[$f] . '.mlt.minwl'] = 0;
+        }
+      }
+      $mlt_params['mlt.fl'] = implode(',', $mlt_fl);
+      $keys = 'id:' . SearchApiSolrConnection::phrase($this->createId($index->machine_name, $mlt['id']));
+    }
+
+    // Set defaults
+    if (!$keys) {
+      $keys = NULL;
+    }
+    $offset = isset($options['offset']) ? $options['offset'] : 0;
+    $limit = isset($options['limit']) ? $options['limit'] : 1000000;
+
+    // Collect parameters
+    $params = array(
+      'fl' => 'item_id,score',
+      'qf' => $qf,
+      'fq' => $fq,
+    );
+    if ($sort) {
+      $params['sort'] = implode(', ', $sort);
+    }
+    if (!empty($facet_params['facet.field'])) {
+      $params += $facet_params;
+    }
+    if (!empty($highlight_params)) {
+      $params += $highlight_params;
+    }
+    if (!empty($options['search_api_spellcheck'])) {
+      $params['spellcheck'] = 'true';
+    }
+    if (!empty($mlt_params['mlt.fl'])) {
+      $params += $mlt_params;
+    }
+    if (!empty($this->options['retrieve_data'])) {
+      $params['fl'] = '*,score';
+    }
+    $call_args = array(
+      'query'  => &$keys,
+      'offset' => &$offset,
+      'limit'  => &$limit,
+      'params' => &$params,
+    );
+    if ($this->request_handler) {
+      $this->setRequestHandler($this->request_handler, $call_args);
+    }
+
+    try {
+      // Send search request
+      $time_processing_done = microtime(TRUE);
+      $this->connect();
+      drupal_alter('search_api_solr_query', $call_args, $query);
+      $this->preQuery($call_args, $query);
+
+      // Retrieve http method from server options.
+      $http_method = !empty($this->options['http_method']) ? $this->options['http_method'] : Apache_Solr_Service::METHOD_POST;
+      $response = $this->solr->search($keys, $offset, $limit, $params, $http_method);
+      $time_query_done = microtime(TRUE);
+
+      if ($response->getHttpStatus() != 200) {
+        throw new SearchApiException(t('The Solr server responded with status code @status: @msg.',
+            array('@status' => $response->getHttpStatus(), '@msg' => $response->getHttpStatusMessage())));
+      }
+
+      // Extract results
+      $results = $this->extractResults($query, $response);
+
+      // Extract facets
+      if ($facets = $this->extractFacets($query, $response)) {
+        $results['search_api_facets'] = $facets;
+      }
+
+      drupal_alter('search_api_solr_search_results', $results, $query, $response);
+      $this->postQuery($results, $query, $response);
+
+      // Compute performance
+      $time_end = microtime(TRUE);
+      $results['performance'] = array(
+        'complete' => $time_end - $time_method_called,
+        'preprocessing' => $time_processing_done - $time_method_called,
+        'execution' => $time_query_done - $time_processing_done,
+        'postprocessing' => $time_end - $time_query_done,
+      );
+
+      return $results;
+    }
+    catch (Exception $e) {
+      throw new SearchApiException(t('An error occurred while trying to search with Solr: @msg.', array('@msg' => $e->getMessage())));
+    }
+  }
+
+  /**
+   * Extract results from a Solr response.
+   *
+   * @param Apache_Solr_Response $response
+   *   A response object from SolrPhpClient.
+   *
+   * @return array
+   *   An array with two keys:
+   *   - result count: The number of total results.
+   *   - results: An array of search results, as specified by
+   *     SearchApiQueryInterface::execute().
+   */
+  protected function extractResults(SearchApiQueryInterface $query, Apache_Solr_Response $response) {
+    $index = $query->getIndex();
+    $fields = $this->getFieldNames($index);
+    $field_options = $index->options['fields'];
+
+    // Set up the results array.
+    $results = array();
+    $results['results'] = array();
+    // In some rare cases (e.g., MLT query with nonexistent ID) the response
+    // will be NULL.
+    if (!isset($response->response)) {
+      $results['result count'] = 0;
+      return $results;
+    }
+    $results['result count'] = $response->response->numFound;
+
+    // Add each search result to the results array.
+    foreach ($response->response->docs as $doc) {
+      // Blank result array.
+      $result = array(
+        'id' => NULL,
+        'score' => NULL,
+        'fields' => array(),
+      );
+
+      // Extract properties from the Solr document, translating from Solr to
+      // Search API property names. This reverses the mapping in
+      // SearchApiSolrService::getFieldNames().
+      foreach ($fields as $search_api_property => $solr_property) {
+        if (isset($doc->{$solr_property})) {
+          $result['fields'][$search_api_property] = $doc->{$solr_property};
+          // Date fields need some special treatment to become valid date values
+          // (i.e., timestamps) again.
+          if (isset($field_options[$search_api_property]['type'])
+              && $field_options[$search_api_property]['type'] == 'date'
+              && preg_match('/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/', $result['fields'][$search_api_property])) {
+            $result['fields'][$search_api_property] = strtotime($result['fields'][$search_api_property]);
+          }
+        }
+      }
+
+      // We can find the item id and score in the special 'search_api_*'
+      // properties. Mappings are provided for these properties in
+      // SearchApiSolrService::getFieldNames().
+      $result['id'] = $result['fields']['search_api_item_id'];
+      $result['score'] = $result['fields']['search_api_relevance'];
+
+      $solr_id = $this->createId($index->machine_name, $result['id']);
+      $excerpt = $this->getExcerpt($response, $solr_id, $result['fields'], $fields);
+      if ($excerpt) {
+        $result['excerpt'] = $excerpt;
+      }
+
+      // Use the result's id as the array key. By default, 'id' is mapped to
+      // 'item_id' in SearchApiSolrService::getFieldNames().
+      if ($result['id']) {
+        $results['results'][$result['id']] = $result;
+      }
+    }
+
+    // Check for spellcheck suggestions.
+    if (module_exists('search_api_spellcheck') && $query->getOption('search_api_spellcheck')) {
+      $results['search_api_spellcheck'] = new SearchApiSpellcheckSolr($response);
+    }
+
+    return $results;
+  }
+
+  /**
+   * Extract and format highlighting information for a specific item from a Solr response.
+   *
+   * Will also use highlighted fields to replace retrieved field data, if the
+   * corresponding option is set.
+   */
+  protected function getExcerpt(Apache_Solr_Response $response, $id, array &$fields, array $field_mapping) {
+    if (!isset($response->highlighting->$id)) {
+      return FALSE;
+    }
+    $output = '';
+
+    if (!empty($this->options['excerpt']) && !empty($response->highlighting->$id->spell)) {
+      foreach ($response->highlighting->$id->spell as $snippet) {
+        $snippet = strip_tags($snippet);
+        $snippet = preg_replace('/^.*>|<.*$/', '', $snippet);
+        $snippet = $this->formatHighlighting($snippet);
+        // The created fragments sometimes have leading or trailing punctuation.
+        // We remove that here for all common cases, but take care not to remove
+        // < or > (so HTML tags stay valid).
+        $snippet = trim($snippet, "\00..\x2F:;=\x3F..\x40\x5B..\x60");
+        $output .= $snippet . ' … ';
+      }
+    }
+    if (!empty($this->options['highlight_data'])) {
+      foreach ($field_mapping as $search_api_property => $solr_property) {
+        if (substr($solr_property, 0, 2) == 't_' && !empty($response->highlighting->$id->$solr_property)) {
+          // Contrary to above, we here want to preserve HTML, so we just
+          // replace the [HIGHLIGHT] tags with the appropriate format here.
+          $fields[$search_api_property] = $this->formatHighlighting($response->highlighting->$id->$solr_property);
+        }
+      }
+    }
+
+    return $output;
+  }
+
+
+  protected function formatHighlighting($snippet) {
+    return preg_replace('#\[(/?)HIGHLIGHT\]#', '<$1strong>', $snippet);
+  }
+
+  /**
+   * Extract facets from a Solr response.
+   *
+   * @param Apache_Solr_Response $response
+   *   A response object from SolrPhpClient.
+   *
+   * @return array
+   *   An array describing facets that apply to the current results.
+   */
+  protected function extractFacets(SearchApiQueryInterface $query, Apache_Solr_Response $response) {
+    if (isset($response->facet_counts->facet_fields)) {
+      $index = $query->getIndex();
+      $fields = $this->getFieldNames($index);
+
+      $facets = array();
+      $facet_fields = $response->facet_counts->facet_fields;
+
+      $extract_facets = $query->getOption('search_api_facets');
+      $extract_facets = ($extract_facets ? $extract_facets : array());
+
+      foreach ($extract_facets as $delta => $info) {
+        $field = $fields[$info['field']];
+        if (!empty($facet_fields->$field)) {
+          $min_count = $info['min_count'];
+          $terms = $facet_fields->$field;
+          if ($info['missing']) {
+            // We have to correctly incorporate the "_empty_" term.
+            // This will ensure that the term with the least results is dropped, if the limit would be exceeded.
+            if (isset($terms->_empty_) && $terms->_empty_ < $min_count) {
+              unset($terms->_empty_);
+            }
+            else {
+              $terms = (array) $terms;
+              arsort($terms);
+              if (count($terms) > $info['limit']) {
+                array_pop($terms);
+              }
+            }
+          }
+          elseif (isset($terms->_empty_)) {
+            $terms = clone $terms;
+            unset($terms->_empty_);
+          }
+          $type = isset($index->options['fields'][$info['field']]['type']) ? $index->options['fields'][$info['field']]['type'] : 'string';
+          foreach ($terms as $term => $count) {
+            if ($count >= $min_count) {
+              if ($type == 'boolean') {
+                if ($term == 'true') {
+                  $term = 1;
+                }
+                elseif ($term == 'false') {
+                  $term = 0;
+                }
+              }
+              elseif ($type == 'date') {
+                $term = isset($term) ? strtotime($term) : NULL;
+              }
+              $term = $term === '_empty_' ? '!' : '"' . $term . '"';
+              $facets[$delta][] = array(
+                'filter' => $term,
+                'count' => $count,
+              );
+            }
+          }
+          if (empty($facets[$delta])) {
+            unset($facets[$delta]);
+          }
+        }
+      }
+
+      return $facets;
+    }
+  }
+
+  /**
+   * Flatten a keys array into a single search string.
+   *
+   * @param array $keys
+   *   The keys array to flatten, formatted as specified by
+   *   SearchApiQueryInterface::getKeys().
+   *
+   * @return string
+   *   A Solr query string representing the same keys.
+   */
+  protected function flattenKeys(array $keys) {
+    $k = array();
+    $or = $keys['#conjunction'] == 'OR';
+    $neg = !empty($keys['#negation']);
+    foreach (element_children($keys) as $i) {
+      $key = $keys[$i];
+      if (!$key) {
+        continue;
+      }
+      if (is_array($key)) {
+        $subkeys = $this->flattenKeys($key);
+        if ($subkeys) {
+          $nested_expressions = TRUE;
+          // If this is a negated OR expression, we can't just use nested keys
+          // as-is, but have to put them into parantheses.
+          if ($or && $neg) {
+            $subkeys = "($subkeys)";
+          }
+          $k[] = $subkeys;
+        }
+      }
+      else {
+        $key = trim($key);
+        $key = SearchApiSolrConnection::phrase($key);
+        $k[] = $key;
+      }
+    }
+    if (!$k) {
+      return '';
+    }
+
+    // Formatting the keys into a Solr query can be a bit complex. The following
+    // code will produce that look like this:
+    //
+    // #conjunction | #negation | return value
+    // ----------------------------------------------------------------
+    // AND          | FALSE     | A B C
+    // AND          | TRUE      | -(A B C)
+    // OR           | FALSE     | ((A) OR (B) OR (C))
+    // OR           | TRUE      | -A -B -C
+
+    // If there was just a single, unnested key, we can ignore all this.
+    if (count($k) == 1 && empty($nested_expressions)) {
+      $k = reset($k);
+      return $neg ? "-$k" : $k;
+    }
+
+    if ($or) {
+      if ($neg) {
+        return '-' . implode(' -', $k);
+      }
+      return '((' . implode(') OR (', $k) . '))';
+    }
+    $k = implode(' ', $k);
+    return $neg ? "-($k)" : $k;
+  }
+
+  /**
+   * Transforms a query filter into a flat array of Solr filter queries, using
+   * the field names in $fields.
+   */
+  protected function createFilterQueries(SearchApiQueryFilterInterface $filter, array $solr_fields, array $fields) {
+    $or = $filter->getConjunction() == 'OR';
+    $fq = array();
+    foreach ($filter->getFilters() as $f) {
+      if (is_array($f)) {
+        if (!isset($fields[$f[0]])) {
+          throw new SearchApiException(t('Filter term on unknown or unindexed field @field.', array('@field' => $f[0])));
+        }
+        if ($f[1] !== '') {
+          $fq[] = $this->createFilterQuery($solr_fields[$f[0]], $f[1], $f[2], $fields[$f[0]]);
+        }
+      }
+      else {
+        $q = $this->createFilterQueries($f, $solr_fields, $fields);
+        if ($filter->getConjunction() != $f->getConjunction()) {
+          // $or == TRUE means the nested filter has conjunction AND, and vice versa
+          $sep = $or ? ' ' : ' OR ';
+          $fq[] = count($q) == 1 ? reset($q) : '((' . implode(')' . $sep . '(', $q) . '))';
+        }
+        else {
+          $fq = array_merge($fq, $q);
+        }
+      }
+    }
+    return ($or && count($fq) > 1) ? array('((' . implode(') OR (', $fq) . '))') : $fq;
+  }
+
+  /**
+   * Create a single search query string according to the given field, value
+   * and operator.
+   */
+  protected function createFilterQuery($field, $value, $operator, $field_info) {
+    $field = SearchApiSolrConnection::escapeFieldName($field);
+    if ($value === NULL) {
+      return ($operator == '=' ? '-' : '') . "$field:[* TO *]";
+    }
+    $value = trim($value);
+    $value = $this->formatFilterValue($value, search_api_extract_inner_type($field_info['type']));
+    switch ($operator) {
+      case '<>':
+        return "-($field:$value)";
+      case '<':
+        return "$field:{* TO $value}";
+      case '<=':
+        return "$field:[* TO $value]";
+      case '>=':
+        return "$field:[$value TO *]";
+      case '>':
+        return "$field:{{$value} TO *}";
+
+      default:
+        return "$field:$value";
+    }
+  }
+
+  /**
+   * Format a value for filtering on a field of a specific type.
+   */
+  protected function formatFilterValue($value, $type) {
+    switch ($type) {
+      case 'boolean':
+        $value = $value ? 'true' : 'false';
+        break;
+      case 'date':
+        $value = is_numeric($value) ? (int) $value : strtotime($value);
+        if ($value === FALSE) {
+          return 0;
+        }
+        $value = format_date($value, 'custom', self::SOLR_DATE_FORMAT, 'UTC');
+        break;
+    }
+    return SearchApiSolrConnection::phrase($value);
+  }
+
+  /**
+   * Helper method for creating the facet field parameters.
+   */
+  protected function getFacetParams(array $facets, array $fields, array &$fq = array()) {
+    if (!$facets) {
+      return array();
+    }
+    $facet_params['facet'] = 'true';
+    $facet_params['facet.sort'] = 'count';
+    $facet_params['facet.limit'] = 10;
+    $facet_params['facet.mincount'] = 1;
+    $facet_params['facet.missing'] = 'false';
+    $taggedFields = array();
+    foreach ($facets as $info) {
+      if (empty($fields[$info['field']])) {
+        continue;
+      }
+      // String fields have their own corresponding facet fields.
+      $field = $fields[$info['field']];
+      // Check for the "or" operator.
+      if (isset($info['operator']) && $info['operator'] === 'or') {
+        // Remember that filters for this field should be tagged.
+        $escaped = SearchApiSolrConnection::escapeFieldName($fields[$info['field']]);
+        $taggedFields[$escaped] = "{!tag=$escaped}";
+        // Add the facet field.
+        $facet_params['facet.field'][] = "{!ex=$escaped}$field";
+      }
+      else {
+        // Add the facet field.
+        $facet_params['facet.field'][] = $field;
+      }
+      // Set limit, unless it's the default.
+      if ($info['limit'] != 10) {
+        $facet_params["f.$field.facet.limit"] = $info['limit'] ? $info['limit'] : -1;
+      }
+      // Set mincount, unless it's the default.
+      if ($info['min_count'] != 1) {
+        $facet_params["f.$field.facet.mincount"] = $info['min_count'];
+      }
+      // Set missing, if specified.
+      if ($info['missing']) {
+        $facet_params["f.$field.facet.missing"] = 'true';
+      }
+    }
+    // Tag filters of fields with "OR" facets.
+    foreach ($taggedFields as $field => $tag) {
+      $regex = '#(?<![^( ])' . preg_quote($field, '#') . ':#';
+      foreach ($fq as $i => $filter) {
+        // Solr can't handle two tags on the same filter, so we don't add two.
+        // Another option here would even be to remove the other tag, too,
+        // since we can be pretty sure that this filter does not originate from
+        // a facet – however, wrong results would still be possible, and this is
+        // definitely an edge case, so don't bother.
+        if (preg_match($regex, $filter) && substr($filter, 0, 6) != '{!tag=') {
+          $fq[$i] = $tag . $filter;
+        }
+      }
+    }
+
+    return $facet_params;
+  }
+
+  /**
+   * Helper method for creating the highlighting parameters.
+   *
+   * (The $query parameter currently isn't used and only here for the potential
+   * sake of subclasses.)
+   */
+  protected function getHighlightParams(SearchApiQueryInterface $query) {
+    $highlight_params = array();
+
+    if (!empty($this->options['excerpt']) || !empty($this->options['highlight_data'])) {
+      $highlight_params['hl'] = 'true';
+      $highlight_params['hl.fl'] = 'spell';
+      $highlight_params['hl.simple.pre'] = '[HIGHLIGHT]';
+      $highlight_params['hl.simple.post'] = '[/HIGHLIGHT]';
+      $highlight_params['hl.snippets'] = 3;
+      $highlight_params['hl.fragsize'] = 70;
+      $highlight_params['hl.mergeContiguous'] = 'true';
+    }
+
+    if (!empty($this->options['highlight_data'])) {
+      $highlight_params['hl.fl'] = 't_*';
+      $highlight_params['hl.snippets'] = 1;
+      $highlight_params['hl.fragsize'] = 0;
+      if (!empty($this->options['excerpt'])) {
+        // If we also generate a "normal" excerpt, set the settings for the
+        // "spell" field (which we use to generate the excerpt) back to the
+        // above values.
+        $highlight_params['f.spell.hl.snippets'] = 3;
+        $highlight_params['f.spell.hl.fragsize'] = 70;
+        // It regrettably doesn't seem to be possible to set hl.fl to several
+        // values, if one contains wild cards (i.e., "t_*,spell" wouldn't work).
+        $highlight_params['hl.fl'] = '*';
+      }
+    }
+
+    return $highlight_params;
+  }
+
+  /**
+   * Helper method for setting the request handler, and making necessary
+   * adjustments to the request parameters.
+   *
+   * @param $handler
+   *   Name of the handler to set.
+   * @param array $call_args
+   *   An associative array containing all four arguments to the
+   *   Apache_Solr_Service::search() call ("query", "offset", "limit" and
+   *   "params") as references.
+   *
+   * @return boolean
+   *   TRUE iff this method invocation handled the given handler. This allows
+   *   subclasses to recognize whether the request handler was already set by
+   *   this method.
+   */
+  protected function setRequestHandler($handler, array &$call_args) {
+    if ($handler == 'pinkPony') {
+      $call_args['params']['qt'] = $handler;
+      return TRUE;
+    }
+    return FALSE;
+  }
+
+  /**
+   * Empty method to allow subclasses to apply custom changes before the query
+   * is sent to Solr. Works exactly like hook_search_api_solr_query_alter().
+   *
+   * @param array $call_args
+   *   An associative array containing all four arguments to the
+   *   Apache_Solr_Service::search() call ("query", "offset", "limit" and
+   *   "params") as references.
+   * @param SearchApiQueryInterface $query
+   *   The SearchApiQueryInterface object representing the executed search query.
+   */
+  protected function preQuery(array &$call_args, SearchApiQueryInterface $query) {
+  }
+
+  /**
+   * Empty method to allow subclasses to apply custom changes before search results are returned.
+   *
+   * Works exactly like hook_search_api_solr_search_results_alter().
+   *
+   * @param array $results
+   *   The results array that will be returned for the search.
+   * @param SearchApiQueryInterface $query
+   *   The SearchApiQueryInterface object representing the executed search query.
+   * @param Apache_Solr_Response $response
+   *   The response object returned by Solr.
+   */
+  protected function postQuery(array &$results, SearchApiQueryInterface $query, Apache_Solr_Response $response) {
+  }
+
+  //
+  // Autocompletion feature
+  //
+
+  /**
+   * Get autocompletion suggestions for some user input.
+   *
+   * @param SearchApiQueryInterface $query
+   *   A query representing the completed user input so far.
+   * @param SearchApiAutocompleteSearch $search
+   *   An object containing details about the search the user is on, and
+   *   settings for the autocompletion.
+   * @param string $incomplete_key
+   *   The start of another fulltext keyword for the search, which should be
+   *   completed.
+   * @param string $user_input
+   *   The complete user input for the fulltext search keywords so far.
+   *
+   * @return array
+   *   An array of suggestion. Each suggestion is either a simple string
+   *   containing the whole suggested keywords, or an array containing the
+   *   following keys:
+   *   - prefix: For special suggestions, some kind of prefix describing them.
+   *   - suggestion_prefix: A suggested prefix for the entered input.
+   *   - user_input: The input entered by the user. Defaults to $user_input.
+   *   - suggestion_suffix: A suggested suffix for the entered input.
+   *   - results: If available, the estimated number of results for these keys.
+   */
+  // Largely copied from the apachesolr_autocomplete module.
+  public function getAutocompleteSuggestions(SearchApiQueryInterface $query, SearchApiAutocompleteSearch $search, $incomplete_key, $user_input) {
+    $suggestions = array();
+    // Reset request handler
+    $this->request_handler = NULL;
+    // Turn inputs to lower case, otherwise we get case sensivity problems.
+    $incomp = drupal_strtolower($incomplete_key);
+
+    $index = $query->getIndex();
+    $fields = $this->getFieldNames($index);
+    $complete = $query->getOriginalKeys();
+
+    // Extract keys
+    $keys = $query->getKeys();
+    if (is_array($keys)) {
+      $keys_array = array();
+      while ($keys) {
+        reset($keys);
+        if (!element_child(key($keys))) {
+          array_shift($keys);
+          continue;
+        }
+        $key = array_shift($keys);
+        if (is_array($key)) {
+          $keys = array_merge($keys, $key);
+        }
+        else {
+          $keys_array[$key] = $key;
+        }
+      }
+      $keys = $this->flattenKeys($query->getKeys());
+    }
+    else {
+      $keys_array = drupal_map_assoc(preg_split('/[-\s():{}\[\]\\\\"]+/', $keys, -1, PREG_SPLIT_NO_EMPTY));
+    }
+    if (!$keys) {
+      $keys = NULL;
+    }
+
+    // Set searched fields
+    $options = $query->getOptions();
+    $search_fields = $query->getFields();
+    $qf = array();
+    foreach ($search_fields as $f) {
+      $qf[] = $fields[$f];
+    }
+
+    // Extract filters
+    $fq = $this->createFilterQueries($query->getFilter(), $fields, $index->options['fields']);
+    $fq[] = 'index_id:' . $index->machine_name;
+
+    // Autocomplete magic
+    $facet_fields = array();
+    foreach ($search_fields as $f) {
+      $facet_fields[] = $fields[$f];
+    }
+
+    $limit = $query->getOption('limit', 10);
+
+    $params = array(
+      'qf' => $qf,
+      'fq' => $fq,
+      'facet' => 'true',
+      'facet.field' => $facet_fields,
+      'facet.prefix' => $incomp,
+      'facet.limit' => $limit * 5,
+      'facet.mincount' => 1,
+      'spellcheck' => (!isset($this->options['autocorrect_spell']) || $this->options['autocorrect_spell']) ? 'true' : 'false',
+      'spellcheck.count' => 1,
+    );
+    $call_args = array(
+      'query'  => &$keys,
+      'offset' => 0,
+      'limit'  => 0,
+      'params' => &$params,
+    );
+    if ($this->request_handler) {
+      $this->setRequestHandler($this->request_handler, $call_args);
+    }
+    $second_pass = !isset($this->options['autocorrect_suggest_words']) || $this->options['autocorrect_suggest_words'];
+    for ($i = 0; $i < ($second_pass ? 2 : 1); ++$i) {
+      try {
+        // Send search request
+        $this->connect();
+        drupal_alter('search_api_solr_query', $call_args, $query);
+        $this->preQuery($call_args, $query);
+        $response = $this->solr->search($keys, 0, 0, $params);
+
+        if ($response->getHttpStatus() != 200) {
+          watchdog('search_api_solr', 'The Solr server responded with status code @status: @msg.', array('@status' => $response->getHttpStatus(), '@msg' => $response->getHttpStatusMessage()), WATCHDOG_WARNING, 'admin/config/search/search_api/server/' . $this->server->machine_name);
+          return array();
+        }
+
+        if (!empty($response->spellcheck->suggestions)) {
+          $replace = array();
+          foreach ($response->spellcheck->suggestions as $word => $data) {
+            $replace[$word] = $data->suggestion[0];
+          }
+          $corrected = str_ireplace(array_keys($replace), array_values($replace), $user_input);
+          if ($corrected != $user_input) {
+            array_unshift($suggestions, array(
+              'prefix' => t('Did you mean') . ':',
+              'user_input' => $corrected,
+            ));
+          }
+        }
+
+        $matches = array();
+        if (isset($response->facet_counts->facet_fields)) {
+          foreach ($response->facet_counts->facet_fields as $terms) {
+            foreach ($terms as $term => $count) {
+              if (isset($matches[$term])) {
+                // If we just add the result counts, we can easily get over the
+                // total number of results if terms appear in multiple fields.
+                // Therefore, we just take the highest value from any field.
+                $matches[$term] = max($matches[$term], $count);
+              }
+              else {
+                $matches[$term] = $count;
+              }
+            }
+          }
+
+          if ($matches) {
+            // Eliminate suggestions that are too short or already in the query.
+            foreach ($matches as $term => $count) {
+              if (strlen($term) < 3 || isset($keys_array[$term])) {
+                unset($matches[$term]);
+              }
+            }
+
+            // Don't suggest terms that are too frequent (by default in more
+            // than 90% of results).
+            $result_count = $response->response->numFound;
+            $max_occurrences = $result_count * variable_get('search_api_solr_autocomplete_max_occurrences', 0.9);
+            if (($max_occurrences >= 1 || $i > 0) && $max_occurrences < $result_count) {
+              foreach ($matches as $match => $count) {
+                if ($count > $max_occurrences) {
+                  unset($matches[$match]);
+                }
+              }
+            }
+
+            // The $count in this array is actually a score. We want the
+            // highest ones first.
+            arsort($matches);
+
+            // Shorten the array to the right ones.
+            $additional_matches = array_slice($matches, $limit - count($suggestions), NULL, TRUE);
+            $matches = array_slice($matches, 0, $limit, TRUE);
+
+            // Build suggestions using returned facets
+            $incomp_length = strlen($incomp);
+            foreach ($matches as $term => $count) {
+              if (drupal_strtolower(substr($term, 0, $incomp_length)) == $incomp) {
+                $suggestions[] = array(
+                  'suggestion_suffix' => substr($term, $incomp_length),
+                  'results' => $count,
+                );
+              }
+              else {
+                $suggestions[] = array(
+                  'suggestion_suffix' => ' ' . $term,
+                  'results' => $count,
+                );
+              }
+            }
+          }
+        }
+      }
+      catch (Exception $e) {
+        watchdog_exception('search_api_solr', $e, "%type during autocomplete Solr query: !message in %function (line %line of %file).", array(), WATCHDOG_WARNING);
+      }
+
+      if (count($suggestions) >= $limit) {
+        break;
+      }
+      // Change parameters for second query.
+      unset($params['facet.prefix']);
+      $keys = trim ($keys . ' ' . $incomplete_key);
+    }
+
+    return $suggestions;
+  }
+
+  //
+  // SearchApiMultiServiceInterface methods
+  //
+
+  /**
+   * Create a query object for searching on this server.
+   *
+   * @param $options
+   *   Associative array of options configuring this query. See
+   *   SearchApiMultiQueryInterface::__construct().
+   *
+   * @throws SearchApiException
+   *   If the server is currently disabled.
+   *
+   * @return SearchApiMultiQueryInterface
+   *   An object for searching this server.
+   */
+  public function queryMultiple(array $options = array()) {
+    return new SearchApiMultiQuery($this->server, $options);
+  }
+
+  /**
+   * Executes a search on the server represented by this object.
+   *
+   * @param SearchApiMultiQueryInterface $query
+   *   The search query to execute.
+   *
+   * @throws SearchApiException
+   *   If an error prevented the search from completing.
+   *
+   * @return array
+   *   An associative array containing the search results, as required by
+   *   SearchApiMultiQueryInterface::execute().
+   */
+  public function searchMultiple(SearchApiMultiQueryInterface $query) {
+    $time_method_called = microtime(TRUE);
+    // Get field information
+    $solr_fields = array(
+      'search_api_id' => 'ss_search_api_id',
+      'search_api_relevance' => 'score',
+      'search_api_multi_index' => 'index_id',
+    );
+    $fields = array(
+      'search_api_multi_index' => array(
+        'type' => 'string',
+      ),
+    );
+    foreach ($query->getIndexes() as $index_id => $index) {
+      if (empty($index->options['fields'])) {
+        continue;
+      }
+      $prefix = $index_id . ':';
+      foreach ($this->getFieldNames($index) as $field => $key) {
+        if (!isset($solr_fields[$field])) {
+          $solr_fields[$prefix . $field] = $key;
+        }
+      }
+      foreach ($index->options['fields'] as $field => $info) {
+        $fields[$prefix . $field] = $info;
+      }
+    }
+
+    // Extract keys
+    $keys = $query->getKeys();
+    if (is_array($keys)) {
+      $keys = $this->flattenKeys($keys);
+    }
+
+    // Set searched fields
+    $search_fields = $query->getFields();
+    $qf = array();
+    foreach ($search_fields as $f) {
+      $qf[] = $solr_fields[$f];
+    }
+
+    // Extract filters
+    $filter = $query->getFilter();
+    $fq = $this->createFilterQueries($filter, $solr_fields, $fields);
+
+    // Restrict search to searched indexes.
+    $index_filter = array();
+    foreach ($query->getIndexes() as $index_id => $index) {
+      $index_filter[] = 'index_id:' . SearchApiSolrConnection::phrase($index_id);
+    }
+    $fq[] = implode(' OR ', $index_filter);
+
+    // Extract sort
+    $sort = array();
+    foreach ($query->getSort() as $f => $order) {
+      $f = $solr_fields[$f];
+      if (substr($f, 0, 3) == 'ss_') {
+        $f = 'sort_' . substr($f, 3);
+      }
+      $order = strtolower($order);
+      $sort[] = "$f $order";
+    }
+
+    // Get facet fields
+    $facets = $query->getOption('search_api_facets') ? $query->getOption('search_api_facets') : array();
+    $facet_params = $this->getFacetParams($facets, $solr_fields);
+
+    // Set defaults
+    if (!$keys) {
+      $keys = NULL;
+    }
+    $options = $query->getOptions();
+    $offset = isset($options['offset']) ? $options['offset'] : 0;
+    $limit = isset($options['limit']) ? $options['limit'] : 1000000;
+
+    // Collect parameters
+    $params = array(
+      'qf' => $qf,
+      'fl' => 'item_id,index_id,score',
+      'fq' => $fq,
+    );
+    if ($sort) {
+      $params['sort'] = implode(', ', $sort);
+    }
+    if (!empty($facet_params['facet.field'])) {
+      $params += $facet_params;
+    }
+    try {
+      // Send search request
+      $time_processing_done = microtime(TRUE);
+      $this->connect();
+      $call_args = array(
+        'query'  => &$keys,
+        'offset' => &$offset,
+        'limit'  => &$limit,
+        'params' => &$params,
+      );
+      drupal_alter('search_api_solr_multi_query', $call_args, $query);
+
+      // Retrieve http method from server options.
+      $http_method = !empty($this->options['http_method']) ? $this->options['http_method'] : Apache_Solr_Service::METHOD_POST;
+      $response = $this->solr->search($keys, $offset, $limit, $params, $http_method);
+      $time_query_done = microtime(TRUE);
+
+      if ($response->getHttpStatus() != 200) {
+        throw new SearchApiException(t('The Solr server responded with status code @status: @msg.',
+            array('@status' => $response->getHttpStatus(), '@msg' => $response->getHttpStatusMessage())));
+      }
+
+      // Extract results
+      $results = array();
+      $results['result count'] = $response->response->numFound;
+      $results['results'] = array();
+      $tmp = array();
+      foreach ($response->response->docs as $id => $doc) {
+        $result = array(
+          'id' => $doc->item_id,
+          'index_id' => $doc->index_id,
+          'score' => $doc->score,
+        );
+        $excerpt = $this->getExcerpt($response, $id, $tmp, array());
+        if ($excerpt) {
+          $result['excerpt'] = $excerpt;
+        }
+        $results['results'][$id] = $result;
+      }
+
+      // Extract facets
+      if (isset($response->facet_counts->facet_fields)) {
+        $results['search_api_facets'] = array();
+        $facet_fields = $response->facet_counts->facet_fields;
+        foreach ($facets as $delta => $info) {
+          $field = $this->getFacetField($solr_fields[$info['field']]);
+          if (!empty($facet_fields->$field)) {
+            $min_count = $info['min_count'];
+            $terms = $facet_fields->$field;
+            if ($info['missing']) {
+              // We have to correctly incorporate the "_empty_" term.
+              // This will ensure that the term with the least results is dropped, if the limit would be exceeded.
+              $terms = (array) $terms;
+              arsort($terms);
+              if (count($terms) > $info['limit']) {
+                array_pop($terms);
+              }
+            }
+            foreach ($terms as $term => $count) {
+              if ($count >= $min_count) {
+                $term = $term == '_empty_' ? '!' : '"' . $term . '"';
+                $results['search_api_facets'][$delta][] = array(
+                  'filter' => $term,
+                  'count' => $count,
+                );
+              }
+            }
+            if (empty($results['search_api_facets'][$delta]) || count($results['search_api_facets'][$delta]) <= 1) {
+              unset($results['search_api_facets'][$delta]);
+            }
+          }
+        }
+      }
+
+      // Compute performance
+      $time_end = microtime(TRUE);
+      $results['performance'] = array(
+        'complete' => $time_end - $time_method_called,
+        'preprocessing' => $time_processing_done - $time_method_called,
+        'execution' => $time_query_done - $time_processing_done,
+        'postprocessing' => $time_end - $time_query_done,
+      );
+
+      return $results;
+    }
+    catch (Exception $e) {
+      throw new SearchApiException($e->getMessage());
+    }
+  }
+
+  //
+  // Additional methods that might be used when knowing the service class.
+  //
+
+  /**
+   * Ping the Solr server to tell whether it can be accessed.
+   *
+   * Uses the admin/ping request handler.
+   */
+  public function ping() {
+    $this->connect();
+    return $this->solr->ping();
+  }
+
+  /**
+   * Sends a commit command to the Solr server.
+   */
+  public function commit() {
+    try {
+      $this->connect();
+      return $this->solr->commit(FALSE, FALSE, FALSE);
+    }
+    catch (Exception $e) {
+      watchdog('search_api_solr', 'A commit operation for server @name failed: @msg.',
+          array('@name' => $this->server->machine_name, '@msg' => $e->getMessage()), WATCHDOG_WARNING);
+    }
+  }
+
+  /**
+   * Schedules a commit operation for this server.
+   *
+   * The commit will be sent at the end of the current page request. Multiple
+   * calls to this method will still only result in one commit operation.
+   */
+  public function scheduleCommit() {
+    if (!$this->commitScheduled) {
+      $this->commitScheduled = TRUE;
+      drupal_register_shutdown_function(array($this, 'commit'));
+    }
+  }
+
+  /**
+   * @return SearchApiSolrConnection
+   *   The solr connection object used by this server.
+   */
+  public function getSolrConnection() {
+    $this->connect();
+    return $this->solr;
+  }
+
+  /**
+   * Get metadata about fields in the Solr/Lucene index.
+   *
+   * @param boolean $reset
+   *   Reload the cached data?
+   */
+  public function getFields($reset = FALSE) {
+    $cid = 'search_api_solr:fields:' . $this->server->machine_name;
+
+    // If the data hasn't been retrieved before and we aren't refreshing it, try
+    // to get data from the cache.
+    if (!isset($this->fields) && !$reset) {
+      $cache = cache_get($cid);
+      if (isset($cache->data) && !$reset) {
+        $this->fields = $cache->data;
+      }
+    }
+
+    // If there was no data in the cache, or if we're refreshing the data,
+    // connect to the Solr server, retrieve schema information, and cache it.
+    if (!isset($this->fields) || $reset) {
+      $this->connect();
+      $this->fields = array();
+      foreach ($this->solr->getFields() as $name => $info) {
+        $this->fields[$name] = new SearchApiSolrField($info);
+      }
+      cache_set($cid, $this->fields);
+    }
+
+    return $this->fields;
+  }
+
+}

+ 7 - 0
solr-conf/1.4/protwords.txt

@@ -0,0 +1,7 @@
+#-----------------------------------------------------------------------
+# This file blocks words from being operated on by the stemmer and word delimiter.
+&amp;
+&lt;
+&gt;
+&#039;
+&quot;

Some files were not shown because too many files changed in this diff