public void ParseResponseWithLocation() {
     var mapper = new AttributesMappingManager();
     var parser = new DefaultResponseParser<Doc>(new SolrDocumentResponseParser<Doc>(mapper, new DefaultDocumentVisitor(mapper, new DefaultFieldParser()), new SolrDocumentActivator<Doc>()));
     var xml = EmbeddedResource.GetEmbeddedXml(GetType(), "Resources.response.xml");
     var results = new SolrQueryResults<Doc>();
     parser.Parse(xml, results);
     Assert.AreEqual(1, results.Count);
     Assert.AreEqual(new Location(51.5171, -0.1062), results[0].Loc);
 }
 public void Parse_If_Both_Result_And_Groups_Are_Present()
 {
     var mapper = new AttributesMappingManager();
     var parser = new DefaultResponseParser<TestDoc>(new SolrDocumentResponseParser<TestDoc>(mapper, new DefaultDocumentVisitor(mapper, new DefaultFieldParser()), new SolrDocumentActivator<TestDoc>()));
     var xml = EmbeddedResource.GetEmbeddedXml(GetType(), "Resources.responseWithResultAndGroup.xml");
     var results = new SolrQueryResults<TestDoc>();
     parser.Parse(xml, results);
     Assert.AreEqual(1, results.Count);
     Assert.AreEqual(1, results.Grouping["titleId"].Ngroups);
 }
Example #3
0
        public void Parse_If_Both_Result_And_Groups_Are_Present()
        {
            var mapper  = new AttributesMappingManager();
            var parser  = new DefaultResponseParser <TestDoc>(new SolrDocumentResponseParser <TestDoc>(mapper, new DefaultDocumentVisitor(mapper, new DefaultFieldParser()), new SolrDocumentActivator <TestDoc>()));
            var xml     = EmbeddedResource.GetEmbeddedXml(GetType(), "Resources.responseWithResultAndGroup.xml");
            var results = new SolrQueryResults <TestDoc>();

            parser.Parse(xml, results);
            Assert.AreEqual(1, results.Count);
            Assert.AreEqual(1, results.Grouping["titleId"].Ngroups);
        }
Example #4
0
        public void ParseResponseWithLocation()
        {
            var mapper  = new AttributesMappingManager();
            var parser  = new DefaultResponseParser <Doc>(new SolrDocumentResponseParser <Doc>(mapper, new DefaultDocumentVisitor(mapper, new DefaultFieldParser()), new SolrDocumentActivator <Doc>()));
            var xml     = EmbeddedResource.GetEmbeddedXml(GetType(), "Resources.response.xml");
            var results = new SolrQueryResults <Doc>();

            parser.Parse(xml, results);
            Assert.AreEqual(1, results.Count);
            Assert.AreEqual(new Location(51.5171, -0.1062), results[0].Loc);
        }
Example #5
0
        public static ISolrBasicOperations <T> GetBasicServer <T>(ISolrConnection connection)
        {
            ISolrFieldParser             fieldParser = new DefaultFieldParser();
            IReadOnlyMappingManager      mapper      = new MemoizingMappingManager(new AttributesMappingManager());
            ISolrDocumentPropertyVisitor visitor     = new DefaultDocumentVisitor(mapper, fieldParser);

            ISolrDocumentResponseParser <T> parser;

            if (typeof(T) == typeof(Dictionary <string, object>))
            {
                parser = (ISolrDocumentResponseParser <T>) new SolrDictionaryDocumentResponseParser(fieldParser);
            }
            else
            {
                parser = new SolrDocumentResponseParser <T>(mapper, visitor, new SolrDocumentActivator <T>());
            }

            ISolrAbstractResponseParser <T> resultParser = new DefaultResponseParser <T>(parser);

            ISolrFieldSerializer fieldSerializer = new DefaultFieldSerializer();

            ;
            ISolrQuerySerializer      querySerializer      = new DefaultQuerySerializer(fieldSerializer);
            ISolrFacetQuerySerializer facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, fieldSerializer);
            // validate why only this?
            ISolrMoreLikeThisHandlerQueryResultsParser <T> mlthResultParser = new SolrMoreLikeThisHandlerQueryResultsParser <T>(new[] { resultParser });

            ISolrQueryExecuter <T> executor = new SolrQueryExecuter <T>(resultParser, connection, querySerializer, facetQuerySerializer, mlthResultParser);

            ISolrDocumentSerializer <T> documentSerializer;

            if (typeof(T) == typeof(Dictionary <string, object>))
            {
                documentSerializer = (ISolrDocumentSerializer <T>) new SolrDictionarySerializer(fieldSerializer);
            }
            else
            {
                documentSerializer = new SolrDocumentSerializer <T>(mapper, fieldSerializer);
            }

            ISolrSchemaParser          schemaParser          = new SolrSchemaParser();
            ISolrHeaderResponseParser  headerParser          = new HeaderResponseParser <T>();
            ISolrDIHStatusParser       dihStatusParser       = new SolrDIHStatusParser();
            ISolrExtractResponseParser extractResponseParser = new ExtractResponseParser(headerParser);

            ISolrBasicOperations <T> basicServer = new SolrBasicServer <T>(connection, executor, documentSerializer, schemaParser, headerParser, querySerializer, dihStatusParser, extractResponseParser);

            return(basicServer);
        }
Example #6
0
        public static AuthAdminSolrServer <T> CreateSolrServer(string connectionString, string coreIndex, IndexType indexType = IndexType.Solr)
        {
            var connection = BuildConnection.CreateSolrConnection(connectionString + coreIndex, indexType);

            var docSerializer        = new SolrDocumentSerializer <T>(new AttributesMappingManager(), new DefaultFieldSerializer());
            var headerResponseParser = new HeaderResponseParser <T>();

            var solrFieldSerializer = new DefaultFieldSerializer();
            var mapper               = new AttributesMappingManager();
            var dparser              = new SolrDocumentResponseParser <T>(mapper, new DefaultDocumentVisitor(mapper, new DefaultFieldParser()), new SolrDocumentActivator <T>());
            var parser               = new DefaultResponseParser <T>(dparser);
            var querySerializer      = new DefaultQuerySerializer(solrFieldSerializer);
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());
            var executer             = new SolrQueryExecuter <T>(parser, connection, querySerializer, facetQuerySerializer, null);

            var basesolr = new SolrBasicServer <T>(connection, executer, docSerializer, null, headerResponseParser, null, null, null);

            return(new AuthAdminSolrServer <T>(basesolr, null, null));
        }
        public DefaultSolrLocator()
        {
            MappingManager          = new MemoizingMappingManager(new AttributesMappingManager());
            FieldParser             = new DefaultFieldParser();
            DocumentPropertyVisitor = new DefaultDocumentVisitor(MappingManager, FieldParser);

            if (typeof(T) == typeof(Dictionary <string, object>))
            {
                DocumentResponseParser =
                    (ISolrDocumentResponseParser <T>) new SolrDictionaryDocumentResponseParser(FieldParser);
            }
            else
            {
                DocumentResponseParser = new SolrDocumentResponseParser <T>(MappingManager, DocumentPropertyVisitor,
                                                                            new SolrDocumentActivator <T>());
            }

            ResponseParser        = new DefaultResponseParser <T>(DocumentResponseParser);
            SchemaParser          = new SolrSchemaParser();
            HeaderParser          = new HeaderResponseParser <string>();
            DihStatusParser       = new SolrDIHStatusParser();
            ExtractResponseParser = new ExtractResponseParser(HeaderParser);
            FieldSerializer       = new DefaultFieldSerializer();

            QuerySerializer      = new DefaultQuerySerializer(FieldSerializer);
            FacetQuerySerializer = new DefaultFacetQuerySerializer(QuerySerializer, FieldSerializer);
            MlthResultParser     = new SolrMoreLikeThisHandlerQueryResultsParser <T>(new[] { ResponseParser });
            StatusResponseParser = new SolrStatusResponseParser();

            if (typeof(T) == typeof(Dictionary <string, object>))
            {
                DocumentSerializer = (ISolrDocumentSerializer <T>) new SolrDictionarySerializer(FieldSerializer);
            }
            else
            {
                DocumentSerializer = new SolrDocumentSerializer <T>(MappingManager, FieldSerializer);
            }

            HttpCache = new NullCache();
        }
        public static IExecuter <TNew> ChangeType <TNew, TOld>(
            this IExecuter <TOld> executer,
            MethodCallExpression expression,
            SelectExpressionsCollection selectExpressionsCollection)
        {
            if (executer == null)
            {
                throw new ArgumentNullException(nameof(executer));
            }
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }
            if (selectExpressionsCollection == null)
            {
                throw new ArgumentNullException(nameof(selectExpressionsCollection));
            }

            try
            {
                SolrQueryExecuter <TOld> oldExecuter = executer.Executer;

                ISolrConnection           connection           = oldExecuter.GetFieldRecursive <ISolrConnection>();
                ISolrQuerySerializer      serializer           = oldExecuter.GetFieldRecursive <ISolrQuerySerializer>();
                ISolrFacetQuerySerializer facetQuerySerializer = oldExecuter.GetFieldRecursive <ISolrFacetQuerySerializer>();

                ISolrDocumentResponseParser <TOld> oldParser =
                    oldExecuter.GetFieldRecursive <ISolrDocumentResponseParser <TOld> >();

                ISolrFieldParser fieldParser = oldParser.GetFieldRecursive <ISolrFieldParser>();
                SolrDictionaryDocumentResponseParser dictionaryParser = new SolrDictionaryDocumentResponseParser(fieldParser);

                ISolrDocumentResponseParser <TNew> docParser;

                if (expression.Method.DeclaringType == typeof(Queryable) && expression.Method.Name == nameof(Queryable.Cast))
                {
                    docParser = new CastResponseParser <TNew, TOld>(oldParser, dictionaryParser);
                }
                else if (expression.Method.DeclaringType == typeof(Queryable) && expression.Method.Name == nameof(Queryable.Select))
                {
                    docParser = new SelectResponseParser <TNew, TOld>(oldParser,
                                                                      dictionaryParser, expression,
                                                                      selectExpressionsCollection);
                }
                else
                {
                    throw new InvalidOperationException(
                              $"Unable to change query type from {typeof(TOld).Name} to {typeof(TNew).Name}. Method {expression.Method.Name} not supported");
                }

                ISolrAbstractResponseParser <TNew> parser = new DefaultResponseParser <TNew>(docParser);

                SolrQueryExecuter <TNew> newExecuter = new SolrQueryExecuter <TNew>(parser, connection, serializer,
                                                                                    facetQuerySerializer,
                                                                                    new SolrMoreLikeThisHandlerQueryResultsParser <TNew>(Enumerable.Repeat(parser, 1)));

                newExecuter.DefaultHandler      = oldExecuter.DefaultHandler;
                newExecuter.DefaultRows         = oldExecuter.DefaultRows;
                newExecuter.MoreLikeThisHandler = oldExecuter.MoreLikeThisHandler;

                return(new SelectQueryExecutor <TNew>(newExecuter));
            }
            catch (Exception e)
            {
                throw new InvalidOperationException(
                          $"Unable to change solr query executer from {typeof(TOld)} to {typeof(TNew)}.", e);
            }
        }