Thursday, June 13, 2013

Using LINQPad with Sitecore 7 and Solr

Adam Conn, one of Sitecore’s Technical Architects, has a great blog article titled Getting to Know Sitecore: LINQPad and Sitecore 7.  Unfortunately if you are using Solr for your search implementation there are a few extra steps that are needed to get things running.  Please take a read through Adam’s post as we will be using his base config as a jumping off point.  This post assumes you are using Castle.Windsor for your IoC which is required for Sitecore and Solr.

1)      Configure LINQPad.config as Adam describes.
a. Make sure to update the all of the <sc.include> tags to point to physical paths.  LINQPad will try to include then from the root directory if you are using the default logical paths.
b. I was unable to use the output of Sitecore’s ShowConfig.aspx to load the Sitecore configuration. Every browser I used mangled some the encoded.  You will see configuration errors when you run your Linq query if you are running into this.  I just used the configuration form my web.config as we aren’t doing much to it with Include files.
2)      Add your Solr configuration
a. Open your Sitecore.ContentSearch.Solr.Indexs.config and add everything in the <Sitecore> node to the <Sitecore> node in your LINQPad.config
3)      Open LINQPad
a. Close and restart if you already had it opened so it will read the new config
4)      Press F4 to bring up the Query Properties
a. Verify all the DLLs your project needs are listed in the “Additional References” Tab
    i. I just pulled in everything in my Applications \bin directory
    ii. Make sure you have references to the following
        1. Castle.Core
        2. Castle.Windsor
        3. Castle.Facilities.SolrNetIntegration
        4. This DLL comes with the Solr Support package available on Sitecore’s SDN
b. Add all of your using statements to the “Additional Namespace Imports”
    i. Here is the list I am using
5) For your Query you will need to change the Language to “C# Program” and wire up Castle.Windsor manually.

Please follow this link to copy this code
As you can see the only big change that is required for Solr to work is to wire up Castle.Windsor manually.  This is typically done in your Global.asax file when using Solr with Sitecore.
One thing to note is that I am creating a POCO for my model and I am hiding the Uri property from the bass SearchResultItem class.  I have found that you get a type conversion error with Sitecore 7 and Solr on the Uri property if left to the definition in SearchResultItem.  So we are hiding this property and forcing it to be of type ItemUri.  This may be a configuration issue in our Solr config, or some other bug somewhere along the way.
Have fun with LINQPad!

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.