Domanda

sto usando SolrNet.0.3.1 e SolrNet.Ninject.0.3.1 in ASP.NET MVC 3 app che punta a un Solr 3,4 istanza.

sto usando più core in modo da poter testare le modifiche dello schema in un secondo core senza rompere l'applicazione. core multipli non sono il problema di per sé; L'applicazione utilizza felicemente "core-live", mentre io sto battendo "core-OnDeck" a morte con errori di battitura muti e modifiche allo schema.

di Solrnet posizione servizio è http: // [server]:. 8983 / [solr-instance] / e di default al core-live tramite impostazione solr.xml defaultCoreName dell'istanza

# solrnet service location
http://[server]:8983/[solr-instance]/

# instance's solr.xml settings for multiple cores
<solr sharedLib="lib" persistent="true">
  <cores adminPath="/admin/cores" defaultCoreName="core-live">
    <core name="core-live" instanceDir="conf/core0/" />
    <core name="core-ondeck" instanceDir="conf/core1/" />
  </cores>
</solr>

Dopo aver testato le modifiche dello schema sul secondo nucleo dal browser di amministrazione GUI di Solr, sostituisco core e l'applicazione dovrebbe ora utilizzare il nucleo Ho appena modificato.

# swap cores so app uses modified schema and index
curl "http://[server]:8983/[solr-instance]/admin/cores?action=SWAP&name=core-live&other=core-ondeck"

Ad eccezione solrnet non prende nota delle modifiche dello schema e, per esempio, fa saltare in aria su una query perché il campo che era di tipo String nel vecchio schema è ora di tipo DateTime nel nuovo.

[ArgumentException: Object of type 'System.DateTime' cannot be converted to type 'System.String'.]
   System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast) +6429224
   System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) +12711129
   System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) +129
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +522
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +38
   System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index) +44
   SolrNet.Impl.DocumentPropertyVisitors.RegularDocumentVisitor.Visit(Object doc, String fieldName, XmlNode field) in c:\prg\SolrNet\svn\SolrNet\Impl\DocumentPropertyVisitors\RegularDocumentVisitor.cs:48
   SolrNet.Impl.DocumentPropertyVisitors.AggregateDocumentVisitor.Visit(Object doc, String fieldName, XmlNode field) in c:\prg\SolrNet\svn\SolrNet\Impl\DocumentPropertyVisitors\AggregateDocumentVisitor.cs:37
   SolrNet.Impl.DocumentPropertyVisitors.DefaultDocumentVisitor.Visit(Object doc, String fieldName, XmlNode field) in c:\prg\SolrNet\svn\SolrNet\Impl\DocumentPropertyVisitors\DefaultDocumentVisitor.cs:39
   SolrNet.Impl.SolrDocumentResponseParser`1.ParseDocument(XmlNode node, ICollection`1 fields) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrDocumentResponseParser.cs:65
   SolrNet.Impl.SolrDocumentResponseParser`1.ParseResults(XmlNode parentNode) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrDocumentResponseParser.cs:50
   SolrNet.Impl.ResponseParsers.ResultsResponseParser`1.Parse(XmlDocument xml, SolrQueryResults`1 results) in c:\prg\SolrNet\svn\SolrNet\Impl\ResponseParsers\ResultsResponseParser.cs:41
   SolrNet.Impl.SolrQueryResultParser`1.Parse(String r) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrQueryResultParser.cs:46
   SolrNet.Impl.SolrQueryExecuter`1.Execute(ISolrQuery q, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrQueryExecuter.cs:309
   SolrNet.Impl.SolrBasicServer`1.Query(ISolrQuery query, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrBasicServer.cs:83
   SolrNet.Impl.SolrServer`1.Query(ISolrQuery query, QueryOptions options) in c:\prg\SolrNet\svn\SolrNet\Impl\SolrServer.cs:50
   Andornot.FhaPhem.Core.Search.SolrSearchOperations.GetResults(ISearchParameters searchParameters) in C:\svn\Client Projects\Fraser Health\PHEM\trunk\Web\Andornot.FhaPhem.Core\Search\SolrSearchOperations.cs:55
   Andornot.FhaPhem.Core.Search.SolrSearchOperations.Query(ISearchParameters searchParameters) in C:\svn\Client Projects\Fraser Health\PHEM\trunk\Web\Andornot.FhaPhem.Core\Search\SolrSearchOperations.cs:29
   Andornot.FhaPhem.Web.Controllers.SearchController.Results(Nullable`1 id) in C:\svn\Client Projects\Fraser Health\PHEM\trunk\Web\Andornot.FhaPhem.Web\Controllers\SearchController.cs:77
   lambda_method(Closure , ControllerBase , Object[] ) +118
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +264
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +39
   System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +129
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +826410
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +826410
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +314
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +825632
   System.Web.Mvc.Controller.ExecuteCore() +159
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +335
   System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +62
   System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +20
   System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +469
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +375

Come faccio aggiornamento del solrnet comprensione dello schema al volo, in un modo che avrebbe funzionato con il nucleo scambio?

È stato utile?

Soluzione

Ecco una situazione analoga, utilizzando strumenti che sono probabilmente più familiare:

Si dispone di un database relazionale (diciamo Microsoft SQL Server), con una tabella di "persona" con un campo "dati" di tipo varchar. Nel codice, si accede a questo tavolo con un ORM (NHibernate o EF, non importa), dove si ha una Person classe con una proprietà di tipo data string in C #.

Ora si modifica lo schema della tabella con SQL Server Enterprise Manager, e cambiare il tipo di dati del campo "Dati" per datetime.

A meno che non si aggiorna il codice di troppo per riflettere questa modifica dello schema, il codice si romperà.

Questo è esattamente ciò che sta accadendo nel tuo caso, se non con Solr invece di un database relazionale, e SolrNet invece di un ORM. Si sta cercando di ottenere una data da Solr in una proprietà di stringa.

Soluzioni:

  • Aggiornare il codice per riflettere i cambiamenti nel vostro nuovo schema.
  • SolrNet mappatura completamente sciolto . Non proprio raccomandato, probabilmente saltare in aria in ogni caso con un cambiamento del genere.

Altri suggerimenti

Credo che il problema è legato al modo in cui avete la vostra impostazione di mappaggio in SolrNet. Se si cambia il tipo di campo nello schema Solr, è necessario apportare la stessa modifica corrispondente nel vostro SolrNet mappatura.

Al fine di consentire SolrNet al lavoro con delle modifiche allo schema volo, sarà necessario implemetn una delle seguenti opzioni:

  1. Seguire la sezione "Fully loose mappatura" definito nella SolrNet Mapping documentazione .
  2. dinamicamente modificare la SolrNet mappato classe quando lo schema è stato cambiato in una nuova classe mappata che corrisponde al nuovo schema.

La prima opzione sarà probabilmente il modo più semplice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top