Ejemplo n.º 1
0
        public void FacetQuery()
        {
            var connection = new MSolrConnection();

            connection.get += (url, param) => {
                Assert.AreEqual("/select", url);
                var expectedParams = new Dictionary <string, string> {
                    { "q", "" },
                    { "rows", SolrQueryExecuter <TestDocumentWithUniqueKey> .ConstDefaultRows.ToString() },
                    { "facet", "true" },
                    { "facet.query", "id:1" },
                };
                CollectionAssert.AreEquivalent(expectedParams, param);
                return(EmbeddedResource.GetEmbeddedString(GetType(), "Resources.response.xml"));
            };

            var querySerializer      = new DefaultQuerySerializer(new DefaultFieldSerializer());
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());
            var parser = new MSolrAbstractResponseParser <TestDocumentWithUniqueKey>();

            parser.parse &= x => x.Stub();
            var executer = new SolrQueryExecuter <TestDocumentWithUniqueKey>(parser, connection, querySerializer, facetQuerySerializer, null);
            var solr     = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, executer, null, null, null, null, null, null);
            var r        = solr.Query(new SolrQuery(""), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetQuery(new SolrQuery("id:1")),
                    },
                }
            });

            Assert.AreEqual(1, connection.get.Calls);
        }
Ejemplo n.º 2
0
        private static IList <KeyValuePair <string, string> > Serialize(object o)
        {
            var fieldSerializer = new DefaultFieldSerializer();
            var serializer      = new DefaultFacetQuerySerializer(new DefaultQuerySerializer(fieldSerializer), fieldSerializer);

            return(serializer.Serialize(o).ToList());
        }
Ejemplo n.º 3
0
        public void FacetFieldOptions()
        {
            var querySerializer      = new SolrQuerySerializerStub("q");
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, null);
            var queryExecuter        = new SolrQueryExecuter <TestDocument>(null, null, querySerializer, facetQuerySerializer, null);
            var facetOptions         = queryExecuter.GetFacetFieldOptions(
                new FacetParameters {
                Queries = new List <ISolrFacetQuery> {
                    new SolrFacetQuery(new SolrQuery("q")),
                },
                Prefix         = "pref",
                EnumCacheMinDf = 123,
                Limit          = 100,
                MinCount       = 5,
                Missing        = true,
                Offset         = 55,
                Sort           = true,
            }).ToDictionary(x => x.Key, x => x.Value);

            Assert.AreEqual("pref", facetOptions["facet.prefix"]);
            Assert.AreEqual("123", facetOptions["facet.enum.cache.minDf"]);
            Assert.AreEqual("100", facetOptions["facet.limit"]);
            Assert.AreEqual("5", facetOptions["facet.mincount"]);
            Assert.AreEqual("true", facetOptions["facet.missing"]);
            Assert.AreEqual("55", facetOptions["facet.offset"]);
            Assert.AreEqual("true", facetOptions["facet.sort"]);
        }
Ejemplo n.º 4
0
        public void Facets()
        {
            var q = new Dictionary <string, string>();

            q["q"]    = "";
            q["rows"] = SolrQueryExecuter <TestDocument> .ConstDefaultRows.ToString();

            q["facet"]       = "true";
            q["facet.field"] = "Id";
            q["facet.query"] = "id:[1 TO 5]";
            var conn            = new MockConnection(q);
            var querySerializer = new DefaultQuerySerializer(new DefaultFieldSerializer());

            var parser = new MSolrAbstractResponseParser <TestDocument>();

            parser.parse &= x => x.Stub();
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());
            var queryExecuter        = new SolrQueryExecuter <TestDocument>(parser, conn, querySerializer, facetQuerySerializer, null);

            queryExecuter.Execute(new SolrQuery(""), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetFieldQuery("Id"),
                        new SolrFacetQuery(new SolrQuery("id:[1 TO 5]")),
                    }
                }
            });
        }
Ejemplo n.º 5
0
        public void MultipleFacetFields()
        {
            var conn = new MockConnection(new[] {
                KV.Create("q", ""),
                KV.Create("rows", SolrQueryExecuter <TestDocument> .ConstDefaultRows.ToString()),
                KV.Create("facet", "true"),
                KV.Create("facet.field", "Id"),
                KV.Create("facet.field", "OtherField"),
            });
            var serializer           = new DefaultQuerySerializer(new DefaultFieldSerializer());
            var facetQuerySerializer = new DefaultFacetQuerySerializer(serializer, new DefaultFieldSerializer());

            var parser = new MSolrAbstractResponseParser <TestDocument>();

            parser.parse &= x => x.Stub();
            var queryExecuter = new SolrQueryExecuter <TestDocument>(parser, conn, serializer, facetQuerySerializer, null);

            queryExecuter.Execute(new SolrQuery(""), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetFieldQuery("Id"),
                        new SolrFacetFieldQuery("OtherField"),
                    }
                }
            });
        }
Ejemplo n.º 6
0
        public void FacetQuery()
        {
            var mocks = new MockRepository();
            var query = new Dictionary <string, string>();

            query["q"]    = "";
            query["rows"] = SolrQueryExecuter <TestDocumentWithUniqueKey> .ConstDefaultRows.ToString();

            query["facet"]       = "true";
            query["facet.query"] = "id:1";
            var connection           = new MockConnection(query);
            var parser               = mocks.StrictMock <ISolrQueryResultParser <TestDocumentWithUniqueKey> >();
            var docSerializer        = mocks.StrictMock <ISolrDocumentSerializer <TestDocumentWithUniqueKey> >();
            var querySerializer      = new DefaultQuerySerializer(new DefaultFieldSerializer());
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());

            With.Mocks(mocks).Expecting(() => {
                Expect.On(parser)
                .Call(parser.Parse(null))
                .IgnoreArguments()
                .Return(new SolrQueryResults <TestDocumentWithUniqueKey>());
            }).Verify(() => {
                var executer = new SolrQueryExecuter <TestDocumentWithUniqueKey>(parser, connection, querySerializer, facetQuerySerializer);
                var solr     = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, executer, docSerializer, null, null, null, null, null);
                var r        = solr.Query(new SolrQuery(""), new QueryOptions {
                    Facet = new FacetParameters {
                        Queries = new ISolrFacetQuery[] {
                            new SolrFacetQuery(new SolrQuery("id:1")),
                        },
                    }
                });
            });
        }
Ejemplo n.º 7
0
        public void Facets()
        {
            var q = new Dictionary <string, string>();

            q["q"]    = "";
            q["rows"] = SolrQueryExecuter <TestDocument> .ConstDefaultRows.ToString();

            q["facet"]       = "true";
            q["facet.field"] = "Id";
            q["facet.query"] = "id:[1 TO 5]";
            var conn                 = new MockConnection(q);
            var mocks                = new MockRepository();
            var parser               = mocks.DynamicMock <ISolrQueryResultParser <TestDocument> >();
            var querySerializer      = new DefaultQuerySerializer(new DefaultFieldSerializer());
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());
            var queryExecuter        = new SolrQueryExecuter <TestDocument>(parser, conn, querySerializer, facetQuerySerializer);

            queryExecuter.Execute(new SolrQuery(""), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetFieldQuery("Id"),
                        new SolrFacetQuery(new SolrQuery("id:[1 TO 5]")),
                    }
                }
            });
        }
Ejemplo n.º 8
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);
        }
Ejemplo n.º 9
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));
        }
Ejemplo n.º 10
0
        public void FacetFieldQuery()
        {
            var mocks = new MockRepository();
            var query = new Dictionary <string, string>();

            query["q"]           = "*:*";
            query["facet"]       = "true";
            query["facet.field"] = "cat";
            query["rows"]        = "0";
            var connection        = new MockConnection(query);
            var resultParser      = mocks.StrictMock <ISolrQueryResultParser <TestDocumentWithUniqueKey> >();
            var mapper            = mocks.StrictMock <IReadOnlyMappingManager>();
            var validationManager = mocks.StrictMock <IMappingValidator>();
            var docSerializer     = mocks.StrictMock <ISolrDocumentSerializer <TestDocumentWithUniqueKey> >();

            With.Mocks(mocks).Expecting(() => {
                Expect.On(resultParser)
                .Call(resultParser.Parse(""))
                .IgnoreArguments()
                .Repeat.Once()
                .Return(new SolrQueryResults <TestDocumentWithUniqueKey> {
                    FacetFields = new Dictionary <string, ICollection <KeyValuePair <string, int> > > {
                        {
                            "cat", new List <KeyValuePair <string, int> > {
                                new KeyValuePair <string, int>("electronics", 5),
                                new KeyValuePair <string, int>("hard drive", 3),
                            }
                        }
                    }
                });
            }).Verify(() => {
                var querySerializer      = new DefaultQuerySerializer(new DefaultFieldSerializer());
                var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());
                var queryExecuter        = new SolrQueryExecuter <TestDocumentWithUniqueKey>(resultParser, connection, querySerializer, facetQuerySerializer);
                var basicSolr            = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, queryExecuter, docSerializer, null, null, null, null, null);
                var solr = new SolrServer <TestDocumentWithUniqueKey>(basicSolr, mapper, validationManager);
                var r    = solr.FacetFieldQuery(new SolrFacetFieldQuery("cat"));
                Assert.AreEqual(2, r.Count);
                Assert.AreEqual("electronics", r.First().Key);
            });
        }
Ejemplo n.º 11
0
        public void FacetField()
        {
            var connection = new MSolrConnection();

            connection.get += new MFunc <string, IEnumerable <KeyValuePair <string, string> >, string>((url, param) => {
                Assert.Equal("/select", url);
                var expectedParams = new Dictionary <string, string> {
                    { "q", "*:*" },
                    { "rows", SolrQueryExecuter <TestDocumentWithUniqueKey> .ConstDefaultRows.ToString() },
                    { "facet", "true" },
                    { "facet.field", "id" },
                    { "f.id.facet.limit", "3" },
                };
                Assert.Equal(expectedParams, param); //should ignore order
                return(EmbeddedResource.GetEmbeddedString(GetType(), "Resources.response.xml"));
            });

            var parser = new MSolrAbstractResponseParser <TestDocumentWithUniqueKey>();

            parser.parse &= x => x.Stub();
            var querySerializer = new MSolrQuerySerializer();

            querySerializer.serialize += _ => "*:*";
            var facetQuerySerializer = new DefaultFacetQuerySerializer(querySerializer, new DefaultFieldSerializer());

            var executer = new SolrQueryExecuter <TestDocumentWithUniqueKey>(parser, connection, querySerializer, facetQuerySerializer, null);
            var solr     = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, executer, null, null, null, null, null, null);
            var r        = solr.Query(new SolrQuery("*:*"), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetFieldQuery("id")
                        {
                            Limit = 3
                        },
                    },
                }
            });

            Assert.Equal(1, connection.get.Calls);
        }
        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();
        }
Ejemplo n.º 13
0
        public void MultipleFacetFields()
        {
            var conn = new MockConnection(new[] {
                KVP("q", ""),
                KVP("rows", SolrQueryExecuter <TestDocument> .ConstDefaultRows.ToString()),
                KVP("facet", "true"),
                KVP("facet.field", "Id"),
                KVP("facet.field", "OtherField"),
            });
            var mocks                = new MockRepository();
            var parser               = mocks.DynamicMock <ISolrQueryResultParser <TestDocument> >();
            var serializer           = new DefaultQuerySerializer(new DefaultFieldSerializer());
            var facetQuerySerializer = new DefaultFacetQuerySerializer(serializer, new DefaultFieldSerializer());
            var queryExecuter        = new SolrQueryExecuter <TestDocument>(parser, conn, serializer, facetQuerySerializer);

            queryExecuter.Execute(new SolrQuery(""), new QueryOptions {
                Facet = new FacetParameters {
                    Queries = new ISolrFacetQuery[] {
                        new SolrFacetFieldQuery("Id"),
                        new SolrFacetFieldQuery("OtherField"),
                    }
                }
            });
        }