After we installed the Solr 1.4 , we use use the solrj as the library Client integration with Solr by using SolrJ .
the latest version of solr is 1.4.x, however, if you want to use the C# client SolrSharp which has not been update sine late 2007. you might need to change something to make the client works with the new version of Solr. say 1.4.
the first exception is called Object reference not set to an instance of an object.
here is one basic snippet to upload one document to solr server via solrsharp. in this example, My solr server is listening on 9999 port. and I started the tcptrace which listens on 8888 and forward all traffic to localhost 9999. based on this, we can see the raw traffic between client and solr server.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using org.apache.solr.SolrSharp.Configuration; using org.apache.solr.SolrSharp.Update; using org.apache.solr.SolrSharp.Indexing; namespace ConsoleApplication6 { class TestSolrSharp { public static void Main() { //upload document try { SolrSearcher solrSearcher = new SolrSearcher("http://localhost:8888/solr", Mode.ReadWrite); SolrUpdater update = new SolrUpdater(solrSearcher); UpdateIndexDocument doc = new UpdateIndexDocument(); doc.Add("id", "1"); doc.Add("title", "test solr"); update.PostToIndex(doc, true); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } } |
When I run it , I get the following error.
System.NullReferenceException: Object reference not set to an instance of an object. |
then I check the tcptrace traffic, get the access exception.
it looks like the client library will first pull the Scheme.xml of solr. When it try to get the schema.xml from /solr/admin/get-file.jsp?file=schema.xml, the solr server returns error of No Access.
So we need to make sure http://localhost:9999/solr/admin/get-file.jsp?file=schema.xml is accessible. Why we dont’t have access at this time.
Let’s check the soure code of the get-file.jsp, as shown in the bellow.
<%@ page contentType="text/plain; charset=utf-8" pageEncoding="UTF-8" %> http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software Object ocore = request.getAttribute("org.apache.solr.SolrCore"); |
from the code, it will check the configuration of gettablefiles in solrconfig.config by default, there is no such configration in the solrconfig.xml (which comes with the new verson), so it means those files are not getable by default. Why?
the newer version expose this file get functionality via another url called /admin/file?
which is configed in solrconfigxml
we get the answer , so fix is easy. just put one more entry in the admin section of solrconfig.xml, rememer to restart solr also.
Now we can use the solrsharp to upload some documents to solr.
For more information.
No comments:
Post a Comment