<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MattWeber.Org</title>
	<atom:link href="http://www.mattweber.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mattweber.org</link>
	<description>Just another WordPress site</description>
	<lastBuildDate>Wed, 14 Dec 2011 00:36:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>ElasticSearch Mock Solr Plugin</title>
		<link>http://www.mattweber.org/2011/12/14/elasticsearch-mock-solr-plugin/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=elasticsearch-mock-solr-plugin</link>
		<comments>http://www.mattweber.org/2011/12/14/elasticsearch-mock-solr-plugin/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 00:36:52 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[elastic search]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[solr]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=190</guid>
		<description><![CDATA[I just released an ElasticSearch plugin that Mocks the Solr interface. With this you can use tools and clients that are meant to talk to Solr with ElasticSearch. Some examples are Nutch, Apache ManifoldCF, SolrJ apps, etc. Currently, indexing and &#8230;<p class="read-more"><a href="http://www.mattweber.org/2011/12/14/elasticsearch-mock-solr-plugin/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I just released an ElasticSearch plugin that Mocks the Solr interface. With this you can use tools and clients that are meant to talk to Solr with ElasticSearch. Some examples are Nutch, Apache ManifoldCF, SolrJ apps, etc. Currently, indexing and deleting of documents is supported 100% for XML (/update request handler) and JavaBin (/update/javabin request handler). Basic support for the Solr search handler (/select) is also included for the Solr q, start, rows, and fl parameters. The q parameter supports 100% of the lucene query syntax. Both XML and JavaBin response formats are supported.</p>
<p>To use the plugin:</p>
<ol>
<li>1. Install</li>
<li>
<pre>$ES_HOME/bin/plugin install mattweber/elasticsearch-mocksolrplugin/1.0.0</pre>
</li>
<li>2. Update your client code to point at ElasticSearch and the /_solr REST endpoint.
<pre>http://localhost:9200/index/type/_solr</pre>
<p>Specifying the index and type is optional and will default to &#8220;solr&#8221; for index, and &#8220;docs&#8221; for type.</li>
<li>3. Use your Solr client as normal.</li>
</ol>
<p>I have tested the plugin with Nutch and various SolrJ test code. Using Nutch with ElasticSearch is the reason I wrote this plugin. Instead of extending Nutch to support ElasticSearch as an endpoint, I figured it would be much better to support any tool trying to talk to Solr. This plugin should greatly reduce the effort in testing and/or replacing Solr with ElasticSearch. It also opens the doors for using tools that were previously not available to ElasticSearch users.</p>
<p>Source available on GitHub:</p>
<p>https://github.com/mattweber/elasticsearch-mocksolrplugin</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2011/12/14/elasticsearch-mock-solr-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solr For WordPress on GitHub</title>
		<link>http://www.mattweber.org/2011/03/29/solr-for-wordpress-on-github/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solr-for-wordpress-on-github</link>
		<comments>http://www.mattweber.org/2011/03/29/solr-for-wordpress-on-github/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 09:00:39 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr for wordpress]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=189</guid>
		<description><![CDATA[I put Solr For WordPress on GitHub. This is the latest code for 0.3.0. https://github.com/mattweber/solr-for-wordpress]]></description>
			<content:encoded><![CDATA[<p>I put Solr For WordPress on GitHub.  This is the latest code for 0.3.0.</p>
<p><a href="https://github.com/mattweber/solr-for-wordpress">https://github.com/mattweber/solr-for-wordpress</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2011/03/29/solr-for-wordpress-on-github/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Running Specific Solr Unit Tests</title>
		<link>http://www.mattweber.org/2009/10/03/running-specific-solr-unit-tests/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=running-specific-solr-unit-tests</link>
		<comments>http://www.mattweber.org/2009/10/03/running-specific-solr-unit-tests/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 23:02:01 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=180</guid>
		<description><![CDATA[Just realized that as of 09/17/09 and revision 816090 of Solr you can now run specific unit tests instead of everything at once. This makes a developers life (mine) much easier because you no longer need to wait for all &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/10/03/running-specific-solr-unit-tests/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Just realized that as of 09/17/09 and revision 816090 of Solr you can now run specific unit tests instead of everything at once.  This makes a developers life (mine) much easier because you no longer need to wait for all Solr&#8217;s tests to run just to test your particular piece of code.</p>
<p>To run specific testcase:</p>
<pre class="codeblock">
ant -Dtestcase=&lt;CLASS NAME&gt; junit
</pre>
<p>To run all tests for a specific package:</p>
<pre class="codeblock">
ant -Dtestpackage=&lt;PACKAGE NAME&gt; junit
</pre>
<p>To run all root tests of a specific package:</p>
<pre class="codeblock">
ant -Dtestpackageroot=&lt;PACKAGE ROOT&gt; junit
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/10/03/running-specific-solr-unit-tests/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Solr for WordPress 0.2.0 Released</title>
		<link>http://www.mattweber.org/2009/05/13/solr-for-wordpress-020-released/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solr-for-wordpress-020-released</link>
		<comments>http://www.mattweber.org/2009/05/13/solr-for-wordpress-020-released/#comments</comments>
		<pubDate>Wed, 13 May 2009 19:22:50 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[facets]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[solr for wordpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=172</guid>
		<description><![CDATA[I just released Solr for WordPress 0.2.0. This release completely replaces the default WordPress search without any special setup. I have also added i18n support so people can translate it into different languages, integrated it into the default WordPress theme, &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/05/13/solr-for-wordpress-020-released/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I just released Solr for WordPress 0.2.0.  This release completely replaces the default WordPress search without any special setup.  I have also added i18n support so people can translate it into different languages, integrated it into the default WordPress theme, and added support to enable or disable specific facets.  This release should make it much easier for people to get setup and working correctly.  As usual, please let me know of any bugs you might find by opening a report at https://bugs.launchpad.net/solr4wordpress.</p>
<p>Download <a href="http://wordpress.org/extend/plugins/solr-for-wordpress/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/05/13/solr-for-wordpress-020-released/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Solr AutoSuggest with TermsComponent and jQuery</title>
		<link>http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solr-autosuggest-with-termscomponent-and-jquery</link>
		<comments>http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/#comments</comments>
		<pubDate>Sat, 02 May 2009 18:58:29 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[autosuggest]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryui]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[servlet]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solrj]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=136</guid>
		<description><![CDATA[I needed to implement an autosuggest/autocomplete search box for use with Solr. After a little research, I found the new TermsComponent feature in Solr 1.4. To use TermsComponent for suggestions, you need to provide set the prefix and lower bound &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I needed to implement an autosuggest/autocomplete search box for use with <a href="http://lucene.apache.org/solr/">Solr</a>.  After a little research, I found the new <a href="http://wiki.apache.org/solr/TermsComponent">TermsComponent</a> feature in <a href="http://lucene.apache.org/solr/">Solr 1.4</a>.  To use TermsComponent for suggestions, you need to provide set the prefix and lower bound to the input term and make the lower bound exclusive.  Use the terms.fl parameter to set the source field.  This means:</p>
<ul>
<li>Set terms.lower to the input term</li>
<li>Set terms.prefix to the input term</li>
<li>Set terms.lower.incl to false</li>
<li>Set terms.fl to the name of the source field</li>
</ul>
<p>Your resulting query should look something like this:</p>
<div class="codeblock">http://localhost:8983/solr/autoSuggest?terms=true&amp;terms.fl=name&amp;terms.lower=py&amp;terms.prefix=py&amp;terms.lower.incl=false&amp;indent=true&amp;wt=json</div>
<p>Note:  This assumes you are using the default solrconfig.xml for Solr 1.4</p>
<p>In the example above I used &#8220;py&#8221; for my input term.  You will then get output that looks similar to this:</p>
<pre class="codeblock">{
 "terms":[
  "spell",[
	"pyblosxom",16,
	"pychm",16,
	"pyqt",16,
	"python",16]]}</pre>
<p>Now that we have TermsComponent setup and working correctly its time to create the autosuggest/autocomplete search box.  Since I am not one to reinvent the wheel, I did a quick search and found a <a href="http://docs.jquery.com/UI/Autocomplete">jQuery UI plugin for autocomplete</a>.  The search frontend I was developing was already using <a href="http://jquery.com/">jQuery</a>, so this plugin was a perfect fit.</p>
<p>This autocomplete plugin is not in the current release of jQuery UI so I needed to grab it from their subversion repository.  You can find instructions where to get it <a href="http://jqueryui.pbworks.com/SelectComboboxAutocomplete">here</a>.</p>
<p>The plugin supports AJAX calls for the data source.  It expects the data source to return each suggestion on it&#8217;s own line, for example:</p>
<pre class="codeblock">pyblosxom
pychm
pyqt
python</pre>
<p>As you saw above, this is not what direct output from Solr looks like.  On top of this, it is not a good idea to expose your backend server via your frontend code.  Time to write a java servlet.</p>
<p>Unfortunately the java client for Solr, <a href="http://wiki.apache.org/solr/Solrj">SolrJ</a>, didn&#8217;t support TermsComponent yet.  I decided to add this support, so please see <a href="http://www.mattweber.org/2009/04/30/solrj-termscomponent-support/">this post</a> for information on my patch.</p>
<p>Assuming you are using a version of SolrJ with my patch, here is a simple servlet that provides the functionality we need:</p>
<pre class="codeblock">protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        String q = req.getParameter("q");
        String limit = req.getParameter("limit");
	PrintWriter writer = res.getWriter();
	List&lt;Term&gt; terms = query(q, Integer.parseInt(limit));

	if (terms != null) {
		for (Term t : terms) {
			writer.println(t.getTerm());
		}
	}
}</pre>
<p>And the query method:</p>
<pre class="codeblock">private List&lt;Term&gt; query(String q, int limit) {
    List&lt;Term&gt; items = null;
    CommonsHttpSolrServer server = null;

     try {
         server = new CommonsHttpSolrServer("http://localhost:8983/solr");
     } catch(Exception e) { e.printStackTrace(); }

     // escape special characters
     SolrQuery query = new SolrQuery();
     query.addTermsField("spell");
     query.setTerms(true);
     query.setTermsLimit(limit);
     query.setTermsLower(q);
     query.setTermsPrefix(q);
     query.setQueryType("/terms");

     try {
         QueryResponse qr = server.query(query);
         TermsResponse resp = qr.getTermsResponse();
         items = resp.getTerms("spell");
     } catch (SolrServerException e) {
      	items = null;
     }

     return items;
}</pre>
<p>Now you may be wondering why I used the &#8220;q&#8221; and &#8220;limit&#8221; parameters.  I use these because this is what the jQuery autocomplete plugin sends to the servlet.  &#8220;q&#8221; is the input term, and &#8220;limit&#8221; is the max number of suggestions to return.</p>
<p>Now to hook everything together.  Insert the following javascript into the head of your search page and replace &#8220;#searchbox&#8221; with the id of the input box you want to use for autocompletion.  Also insert the correct url to your servlet.</p>
<pre class="codeblock">        	$(document).ready(function() {

        		$("#searchbox").autocomplete({ url: 'completion',
        			 max: 5,
        		});
          	});</pre>
<p>Update your css file with required jQuery UI css:</p>
<pre class="codeblock">/* Autocomplete
----------------------------------*/
.ui-autocomplete {}
.ui-autocomplete-results { overflow: hidden; z-index: 99999; padding: 1px; position: absolute; }
.ui-autocomplete-results ul { width: 100%; list-style-position: outside; list-style: none; padding: 0; margin: 0; }&nbsp;

/* if  the width: 100%, a horizontal scrollbar will appear when scroll: true. */
/* !important! if line-height is not set, or is set to a relative unit, scroll will be broken in firefox */
.ui-autocomplete-results li { margin: 0px; padding: 2px 5px; cursor: default; display: block; font: menu; font-size: 12px; line-height: 16px; overflow: hidden; border-collapse: collapse; }
.ui-autocomplete-results li.ui-autocomplete-even { background-color: #fff; }
.ui-autocomplete-results li.ui-autocomplete-odd { background-color: #eee; }

.ui-autocomplete-results li.ui-autocomplete-state-default { background-color: #fff; border: 1px solid #fff; color: #212121; }
.ui-autocomplete-results li.ui-autocomplete-state-active { color: #000; background:#E6E6E6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) repeat-x; border:1px solid #D3D3D3; }

.ui-autocomplete-loading { background: white url('images/ui-anim.basic.16x16.gif') right center no-repeat; }
.ui-autocomplete-over { background-color: #0A246A; color: white; }
</pre>
<p>Congratulations!  You should now have a working Solr-based autocomple search box!<br />
<img src="http://www.mattweber.org/files/solrautocomplete.png" alt="Solr AutoCompletion" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/05/02/solr-autosuggest-with-termscomponent-and-jquery/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>SolrJ TermsComponent Support</title>
		<link>http://www.mattweber.org/2009/04/30/solrj-termscomponent-support/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solrj-termscomponent-support</link>
		<comments>http://www.mattweber.org/2009/04/30/solrj-termscomponent-support/#comments</comments>
		<pubDate>Fri, 01 May 2009 05:03:21 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[auto-complete]]></category>
		<category><![CDATA[dictionary]]></category>
		<category><![CDATA[jira]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[patch]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solrj]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=124</guid>
		<description><![CDATA[I was working on implementing an auto-complete search box today using Solr 1.4 and the new TermsComponent. TermsComponent is a simple plugin that provides access to Lucene&#8217;s term dictionary and is very fast. Being fast and the fact it can &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/04/30/solrj-termscomponent-support/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I was working on implementing an auto-complete search box today using <a href="http://lucene.apache.org/solr/">Solr 1.4</a> and the new <a href="http://wiki.apache.org/solr/TermsComponent">TermsComponent</a>.  TermsComponent is a simple plugin that provides access to <a href="http://lucene.apache.org/">Lucene&#8217;s</a> term dictionary and is very fast.  Being fast and the fact it can hook into a search index makes it perfect for an auto-completion server.</p>
<p>Unfortunately, <a href="http://wiki.apache.org/solr/Solrj">SolrJ</a> does not support this new functionality yet.  Well not officially because you could always parse the raw response object yourself.  That is exactly what I was doing until I figured I might as well just add the support to SolrJ.  I did, and it was extremely easy.</p>
<p>I added support for TermsComponent parameters and implemented a new TermsComponent response type.  The TermsComponent response is parsed into a list of Type objects.  The Type object has two methods, getTerm() and getFrequency().  getTerm() returns the suggested term, and getFrequency() returns the frequency of the term appearing in the index.</p>
<p>I have submitted my patch upstream for inclusion into a future version of SolrJ.</p>
<p>Here is the link to the JIRA bug report:<br />
<a href="https://issues.apache.org/jira/browse/SOLR-1139">https://issues.apache.org/jira/browse/SOLR-1139</a></p>
<p>Here is the patch:<br />
<a href="https://issues.apache.org/jira/secure/attachment/12407047/SOLR-1139.patch">https://issues.apache.org/jira/secure/attachment/12407047/SOLR-1139.patch</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/04/30/solrj-termscomponent-support/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Solr for WordPress</title>
		<link>http://www.mattweber.org/2009/04/21/solr-for-wordpress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=solr-for-wordpress</link>
		<comments>http://www.mattweber.org/2009/04/21/solr-for-wordpress/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 22:43:51 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Php]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[facets]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[search results]]></category>
		<category><![CDATA[solr]]></category>
		<category><![CDATA[solr for wordpress]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=106</guid>
		<description><![CDATA[Solr for WordPress is a WordPress plugin that interacts with an instance of the Solr search engine. With this plugin you can: Index pages and posts Perform advanced queries Enable faceting on fields such as tags, categories, and author Treat &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/04/21/solr-for-wordpress/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p><img src="https://launchpadlibrarian.net/25840106/solr4wordpress.png" alt="Solr for WordPress" class="imgright" /><br />
<a href="https://launchpad.net/solr4wordpress">Solr for WordPress</a> is a <a href="http://wordpress.org/">WordPress</a> plugin that interacts with an instance of the <a href="http://lucene.apache.org/solr/">Solr</a> search engine.  With this plugin you can:</p>
<ul>
<li>Index pages and posts</li>
<li>Perform advanced queries</li>
<li>Enable faceting on fields such as tags, categories, and author</li>
<li>Treat the category facet as a taxonomy</li>
<li>Add special template tags so you can create your own custom result pages to match your theme</li>
<li>Configuration options allow you to select pages to ignore, features to enable/disable, and what type of result information you want output.</li>
<li>Hit highlighting</li>
<li>Dynamic result teasers</li>
</ul>
<p><a href="https://launchpad.net/solr4wordpress">Solr for WordPress</a> requires <a href="http://wordpress.org/">WordPress</a> 2.7 or greater and an instance of <a href="http://lucene.apache.org/solr/">Solr</a> 1.3 or greater.  Installation is simple, just extract the plugin in your <a href="http://wordpress.org/">WordPress</a> plugins folder, activate it, then point it at your Solr instance via the configuration page.  From there, you can index all your pages and/or posts and you are ready to perform searches against your <a href="http://wordpress.org/">WordPress</a> data.</p>
<p>This plugin assumes your <a href="http://lucene.apache.org/solr/">Solr</a> schema contains the following fields:  id, permalink, title, content, numcomments, categories, categoriessrch, tags, tagssrch, author, type, and text.  The facet fields (categories, tags, author, and type) should be string fields.  You can make tagssrch and categoriessrch any type you want as they are used for general searching.  The plugin is distributed with a <a href="http://lucene.apache.org/solr/">Solr</a> schema you can use.  I will eventually package up a version of Solr configured specifically for this plugin.  Until then, the provided schema will have to do.</p>
<p>Integrating <a href="https://launchpad.net/solr4wordpress">Solr for WordPress</a> into your theme is quite simple as well.  The plugin provides two template tags, one for a search box and another for search results.  For the search box, use the s4w_search_form() tag.  For the search results use the s4w_search_results() tag.  These template tags output valid xhtml that you can style with css.</p>
<p>This version of the plugin requires you to create your own search page template then create a search page called &#8220;Search&#8221; using this template.  It also requires you to manually update any search forms to search against the search page you just create (&#8220;/search/&#8221;) and putting the query parameters in the &#8220;qry&#8221; parameter.  In future versions it will completely replace the standard <a href="http://wordpress.org/">WordPress</a> search functionality.</p>
<p>By default, facting is enabled for the category, tags, author, and post type.  Faceting allows your user to drill down into the search results filtering on values of the particular facet.  The category facet can be treated as a taxonomy as well.</p>
<p><b>UPDATE:</b><br />
Released <a href="http://www.mattweber.org/2009/05/13/solr-for-wordpress-020-released/">Solr for WordPress 0.2.0</a></p>
<p>Plugin Home: <a href="https://launchpad.net/solr4wordpress">Solr for WordPress</a><br />
Download:  <a href="http://downloads.wordpress.org/plugin/solr-for-wordpress.0.1.0.zip">Solr for WordPress 0.1.0</a><br />
WordPress Hosted Plugin Page:  <a href="http://wordpress.org/extend/plugins/solr-for-wordpress/">Solr for WordPress</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/04/21/solr-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New Design</title>
		<link>http://www.mattweber.org/2009/04/20/new-design/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-design</link>
		<comments>http://www.mattweber.org/2009/04/20/new-design/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 02:33:04 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[updates]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/?p=94</guid>
		<description><![CDATA[I have finally decided to update my site. I have been pretty busy with work the last couple years and have been slacking on the site. Well, I got an itch to start working on it again and decided to &#8230;<p class="read-more"><a href="http://www.mattweber.org/2009/04/20/new-design/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>I have finally decided to update my site. I have been pretty busy with work the last couple years and have been slacking on the site.  Well, I got an itch to start working on it again and decided to kick off my renewed interest with a completely new design.  The design is a heavily modified version of the <a href="http://github.com/whalesalad/elixir/tree/master">Elixir</a> theme by <a href="http://whalesalad.com/">Michael Whalen</a>.</p>
<p>Along with the new design I have integrated Solr search.  Solr is an amazing search engine.  I wrote a plugin called <a href="https://launchpad.net/solr4wordpress">Solr for WordPress</a> that handles all the integration between Solr and WordPress.  I will be writing a post about the plugin soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2009/04/20/new-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hard Drive Died</title>
		<link>http://www.mattweber.org/2007/03/20/hard-drive-died/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hard-drive-died</link>
		<comments>http://www.mattweber.org/2007/03/20/hard-drive-died/#comments</comments>
		<pubDate>Wed, 21 Mar 2007 00:00:42 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[applecare]]></category>
		<category><![CDATA[hard drive]]></category>
		<category><![CDATA[macbook pro]]></category>
		<category><![CDATA[protection plan]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[warranty]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/2007/03/20/hard-drive-died/</guid>
		<description><![CDATA[Well the hard drive in my MacBook Pro died yesterday. I started noticing drive read/write/seek errors about a week or so ago while working in Linux and yesterday it finally kicked the bucket. Anyways, I have the AppleCare Protection Plan. &#8230;<p class="read-more"><a href="http://www.mattweber.org/2007/03/20/hard-drive-died/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Well the hard drive in my <a href="http://www.apple.com/macbookpro/">MacBook Pro</a> died yesterday.  I started noticing drive read/write/seek errors about a week or so ago while working in <a href="http://www.mattweber.org/2007/03/01/dual-boot-macbook-pro/" title="Dual Boot Fedora Core 6 OSX MacBook Pro">Linux</a> and yesterday it finally kicked the bucket.  Anyways, I have the <a href="http://www.apple.com/support/products/proplan.html">AppleCare Protection Plan</a>.  I am sending it in and it should take about a week or two to get replaced according to Apple.  Damn.</p>
<p><b>Update:</b><br />
I received my MacBook Pro back in 3 days.  The service I received from Apple was amazing.  I shipped it on 3/22/07, it was fixed and shipped back to me on 3/23/07, it was delived via DHL on Saturday 3/24/07 at 9:00am PST.  I would recommend the AppleCare Protection Plan for this quality service alone.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2007/03/20/hard-drive-died/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comment Spam</title>
		<link>http://www.mattweber.org/2007/03/18/comment-spam/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comment-spam</link>
		<comments>http://www.mattweber.org/2007/03/18/comment-spam/#comments</comments>
		<pubDate>Sun, 18 Mar 2007 22:30:54 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[akismet]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[comment spam]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[search api]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.mattweber.org/2007/03/18/comment-spam/</guid>
		<description><![CDATA[Within a week of switching to WordPress for my blogging software, I started receiving a lot of comment spam. I found this amazing because I have had a blog for a few years now without any problems. I have had &#8230;<p class="read-more"><a href="http://www.mattweber.org/2007/03/18/comment-spam/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Within a week of switching to WordPress for my blogging software, I started receiving a lot of comment spam.  I found this amazing because I have had a blog for a few years now without any problems.  I have had the occasional spam comment, but lately I have been receiving 3-7 of them a day.  I know this is very little compared to high-volume sites, but seems like a lot for a small site like mine.  For the most part, the <a href="http://akismet.com/">Akismet spam plugin</a> WordPress ships with does an amazing job.  It has let a few slip by, but that is no big deal.</p>
<p>This whole comment spam problem reminded me of a research paper I read a year or so ago.  It was called <a href="http://www.kaleton.com/infosec/scripted-attacks.pdf">Defending Against an Internet-based Attack on the Physical World</a>.  It was about the threat of using api&#8217;s such as <a href="http://code.google.com/apis/soapsearch/">Google&#8217;s SOAP API</a> to automate filling out request forms for catalogues and other material on thousands of sites to some victim.  This would cause the victim&#8217;s physical mail to become overloaded and very hard to manage.  Imagine 100&#8242;s or 1,000&#8242;s of pieces of mail being delivered to your house every day. The point of this being that I figure spammers are using a technique similar to this to find WordPress blogs, then spam them automatically.</p>
<p>I decided to see how easy it was.  First I went to see if I could sign up for <a href="http://code.google.com/apis/soapsearch/">Google&#8217;s SOAP API</a>, but I found out that they no longer offer this service.  Without this service, it is going to be a lot harder to get this done.  Ignoring the whole api problem, I decided to find a search string to find comment pages on WordPress blogs.  I was amazed at how easy this was.  I just went to a blog using the <a href="http://themes.wordpress.net/columns/2-columns/163/wordpress-default-15/">default WordPress theme</a> and looked for keywords that would always be there.  After about a second I came up with this search string:</p>
<pre class="codeblock">"Leave a Reply" Name Mail Website "proudly powered by WordPress"</pre>
<p>Typing this into google found over 1,000,000 pages!  Clicking a few of these verified that they were infact WordPress comment pages.  Now I needed to write a program to automate parsing these links.  Without the search api, I was stuck doing it manually.  After about an hour I came up with <a href="http://www.mattweber.org/files/wp-link-finder.py" title="python script to find wordpress comment pages">this python script</a>.  This script will submit the search string I generated above to google, parse the first 100 results from the page, then submit a search for the next 100 and so on.  While testing this script I noticed google started blocking my search, which is a good thing.  I found a way around this by using different User-Agent strings and adding some timeouts.  Because of this, the script defaults to saving the first 100 links.  I have left out the code to fill out the comment forms becuase I feel that piece of code would do more harm than good.</p>
<p>Anyways, I think there is a huge problem with comment spam that needs to be fixed.   The fact that so many pages can be found in a single search is amazing.  Google blocking querys when it detects a bot is definitely a step in the right direction.  The fact that I was able to get around this so easily is not.</p>
<p>Files:<br />
<a href="http://www.mattweber.org/files/wp-link-finder.py" title="find wordpress blog links with comment forms">http://www.mattweber.org/files/wp-link-finder.py</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mattweber.org/2007/03/18/comment-spam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 805/885 objects using disk: basic

Served from: www.mattweber.org @ 2012-02-05 00:06:20 -->
