Пример #1
0
 public RangeTerm(RiakFluentSearch search, string field, Token from, Token to, bool inclusive)
     : base(search, field)
 {
     _from      = from;
     _to        = to;
     _inclusive = inclusive;
 }
        public void SettingSearchOnRiakBucketMakesBucketSearchable()
        {
            var bucket = string.Format("{0}_{1}", Bucket, Guid.NewGuid());
            var key    = Guid.NewGuid().ToString();
            var props  = Client.GetBucketProperties(bucket);

            props.SetSearch(true);

            var setResult = Client.SetBucketProperties(bucket, props);

            setResult.ShouldBeTrue();

            var obj       = new RiakObject(bucket, key, new { name = "OJ", age = 34 });
            var putResult = Client.Put(obj);

            putResult.ShouldNotBeNull();

            var q = new RiakFluentSearch(bucket, "name")
                    .Search("OJ")
                    .And("age", "34")
                    .Build();

            var search = new RiakSearchRequest
            {
                Query = q
            };

            var searchResult = Client.Search(search);

            searchResult.ShouldNotBeNull();
            searchResult.NumFound.ShouldEqual(1u);
            searchResult.Documents[0].Fields.Count.ShouldEqual(3);
            searchResult.Documents[0].Fields.First(x => x.Key == "id").Value.ShouldEqual(key);
        }
Пример #3
0
 public RangeTerm(RiakFluentSearch search, string field, Token from, Token to, bool inclusive)
     : base(search, field)
 {
     _from = from;
     _to = to;
     _inclusive = inclusive;
 }
Пример #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RangeTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="from">The lower bound of values to search the <paramref name="field"/> for.</param>
 /// <param name="to">The upper bound of values to search the <paramref name="field"/> for.</param>
 /// <param name="inclusive">The option to include the bounds in the range or not.</param>
 internal RangeTerm(RiakFluentSearch search, string field, Token from, Token to, bool inclusive)
     : base(search, field)
 {
     this.from      = from;
     this.to        = to;
     this.inclusive = inclusive;
 }
Пример #5
0
 private BinaryTerm(RiakFluentSearch search, string field, Op op, Term left)
     : base(search, field)
 {
     _op = op;
     _left = left;
     left.Owner = this;
 }
Пример #6
0
 private BinaryTerm(RiakFluentSearch search, string field, Op op, Term left)
     : base(search, field)
 {
     this.op    = op;
     this.left  = left;
     left.Owner = this;
 }
        public void SimpleIndexFieldUnaryTermSerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "field")
                    .Search("foo")
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("field:foo", q);
        }
        public void SimpleRangeTermSerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Between("10", "20", false)
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:{10 TO 20}", q);
        }
        public void SimpleUnaryTermWithProximitySerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Proximity(5, "foo", "bar", "baz")
                    .Build();
            var q = s.ToString();

            Assert.AreEqual(@"key:""foo bar baz""~5", q);
        }
        public void InitialGroupedTermsSerializeCorrectly2()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Group(Token.Is("foo"), t => t.Or("bar").And("baz", x => x.And("schmoopy")))
                    .Or("bar", t => t.And("slop"))
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:(key:foo OR key:bar AND (key:baz AND key:schmoopy)) OR (key:bar AND key:slop)", q);
        }
        public void SimpleUnaryTermWithBoostSerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .Boost(5)
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:foo^5", q);
        }
        public void SimpleAndTermSerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .And("bar")
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:foo AND key:bar", q);
        }
        public void SimpleOrAndTermWithBoostSerializesCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .Or("bar").Boost(3)
                    .And("baz").Boost(5)
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:foo OR key:bar^3 AND key:baz^5", q);
        }
        public void SearchingViaFluentSearchObjectWorks()
        {
            var search = new RiakFluentSearch(Index, "name_s").Search(Token.StartsWith(_randomId + "Al")).Build();
            var mr     = new RiakMapReduceQuery().Inputs(new RiakSearchInput(search));

            var result = Client.RunMapReduceQuery(mr).WaitUntil(MapReduceTestHelpers.OnePhaseWithTwoResultsFound);

            result.IsSuccess.ShouldBeTrue(result.ErrorMessage);

            AssertThatResultContainsAllKeys(result);
        }
        public void ValueTextEscapedCorrectly()
        {
            var search = new RiakFluentSearch("bucket", "key")
                         .Search(@"This is\ a ""Test"" to make 'sure' it (the text) is [characterised] correctly (master:slave) + includes - this url: http://foo.com/bar?baz=quux")
                         .Build();

            var query = search.ToString();

            var expected = @"key:This\ is\\\ a\ \""Test\""\ to\ make\ \'sure\'\ it\ \(the\ text\)\ is\ \[characterised\]\ correctly\ \(master\:slave\)\ \+\ includes\ \-\ this\ url\:\ http\:\/\/foo.com\/bar\?baz=quux";

            Assert.AreEqual(expected, query);
        }
        public void SearchingViaFluentSearchObjectWorks()
        {
            var search = new RiakFluentSearch(Bucket, "name").Search(Token.StartsWith("Al")).Build();

#pragma warning disable 612, 618
            var mr = new RiakMapReduceQuery().Inputs(new RiakBucketSearchInput(search));
#pragma warning restore 612, 618

            var result = Client.MapReduce(mr);
            result.IsSuccess.ShouldBeTrue(result.ErrorMessage);

            CheckThatResultContainAllKeys(result);
        }
        public void GroupedNotTermsSerializeCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .Or("bar").Not()
                    .And("baz", t => t.Or("quux")).Not()
                    .Or("baz", t => t.And("schmoopy")
                        .Boost(6)
                        .And("dooby", x => x.Or("fooby").Not()))
                    .Build();
            var q = s.ToString();

            Assert.AreEqual("key:foo OR NOT key:bar AND NOT (key:baz OR key:quux) OR (key:baz AND key:schmoopy^6 AND (key:dooby OR NOT key:fooby))", q);
        }
        public void UsingFluentQueryProducesSameQueryAsString()
        {
            string index     = "index";
            string field     = "data_s";
            string search    = "frazzle";
            string solrQuery = string.Format("{0}:{1}", field, search);

            var fluentSearch = new RiakFluentSearch(index, field).Search(search).Build();
            var s1           = new RiakSearchRequest {
                Query = fluentSearch
            };
            var s2 = new RiakSearchRequest(index, solrQuery);

            Assert.AreEqual(s1, s2);
        }
        public void ComplicatedTermsSerializeCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .Or("bar").Not()
                    .AndBetween("10", "20")
                    .And("baz", t => t.Or("quux").OrBetween("la", "da", false)).Not()
                    .AndProximity(3, "testing", "these words")
                    .Or("baz", t => t.And("schmoopy for president+")
                        .Boost(6)
                        .And(Token.StartsWith("dooby"), x => x.Or("fooby").Not()))
                    .Build();
            var q = s.ToString();

            Assert.AreEqual(@"key:foo OR NOT key:bar AND key:[10 TO 20] AND NOT (key:baz OR key:quux OR key:{la TO da}) AND key:""testing these\ words""~3 OR (key:baz AND key:schmoopy\ for\ president\+^6 AND (key:dooby* OR NOT key:fooby))", q);
        }
        public void UsingFluentQueryWithFilterProducesSameQueryAsString()
        {
            string index      = "index";
            string field      = "data_s";
            string search     = "frazzle";
            string solrQuery  = string.Format("{0}:{1}", field, search);
            string solrFilter = string.Format("{0}:[10 TO 20]", field);

            var fluentSearch = new RiakFluentSearch(index, field).Search(search).Build();
            var fluentFilter = new RiakFluentSearch(index, field).Between("10", "20", true).Build();
            var s1           = new RiakSearchRequest {
                Query = fluentSearch, Filter = fluentFilter
            };
            var s2 = new RiakSearchRequest(index, solrQuery, solrFilter);

            Assert.AreEqual(s1, s2);
        }
        public void ComplicatedTermsWithExtraFieldsSerializeCorrectly()
        {
            var s = new RiakFluentSearch("bucket", "key")
                    .Search("foo")
                    .Or("bar").Not()
                    .AndBetween("10", "20", true)
                    .Or("otherkey", "baz", t => t.And("hash", Token.StartsWith("schmoopy for president+"))
                        .Boost(6)
                        .And("bash", "dooby", x => x.Or("dash", "fooby").Not())
                        .Or("smelly"))
                    .And("baz", t => t.Or("zoom", "quux").OrBetween("la", "da", false)).Not()
                    .OrProximity("lala", 10, "wouldn't", "haven't").Not()
                    .Build();
            var q = s.ToString();

            Assert.AreEqual(@"key:foo OR NOT key:bar AND key:[10 TO 20] OR (otherkey:baz AND hash:schmoopy\ for\ president\+*^6 AND (bash:dooby OR NOT dash:fooby) OR bash:smelly) AND NOT (otherkey:baz OR zoom:quux OR zoom:{la TO da}) OR NOT lala:""wouldn\'t haven\'t""~10", q);
        }
Пример #22
0
        public void SearchingViaFluentSearchObjectWorks()
        {
            Client.Put(new RiakObject(Bucket, RiakSearchKey, RiakSearchDoc, RiakConstants.ContentTypes.ApplicationJson));
            Client.Put(new RiakObject(Bucket, RiakSearchKey2, RiakSearchDoc2, RiakConstants.ContentTypes.ApplicationJson));

            var search = new RiakFluentSearch(Bucket, "name").Search(Token.StartsWith("A1")).Build();
            var mr     = new RiakMapReduceQuery()
                         .Inputs(new RiakBucketSearchInput(search));

            var result = Client.MapReduce(mr);

            result.IsSuccess.ShouldBeTrue(result.ErrorMessage);

            var mrResult = result.Value;

            mrResult.PhaseResults.Count().ShouldEqual(1);

            mrResult.PhaseResults.ElementAt(0).Values.ShouldNotBeNull();
            // TODO Add data introspection to test - need to verify the results, after all.
        }
        public void SearchingComplexQueryWorks()
        {
            var search = new RiakFluentSearch(Index, "name_s");

            // name_s:{integer}Al* AND bio_tsd:awesome AND bio_tsd:an AND (bio_tsd:mathematician OR favorites.album_tsd:Fame)
            search.Search(Token.StartsWith(_randomId + "Al"))
            .And("bio_tsd", "awesome")
            .And("an")
            .And("mathematician", s => s.Or("favorites.album_tsd", "Fame"));

            var mr = new RiakMapReduceQuery().Inputs(new RiakSearchInput(search));

            var result = Client.RunMapReduceQuery(mr).WaitUntil(MapReduceTestHelpers.OnePhaseWithOneResultFound);

            result.IsSuccess.ShouldBeTrue(result.ErrorMessage);
            var singleResult   = result.Value.PhaseResults.First().Values[0].FromRiakString();
            var failureMessage = string.Format("Results did not contain \"{0}\". \r\nResult was:\"{1}\"",
                                               PublicKey, singleResult);

            singleResult.Contains(PublicKey).ShouldBeTrue(failureMessage);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="UnaryTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="value">The <see cref="Token"/> to search the <paramref name="field"/> for.</param>
 internal UnaryTerm(RiakFluentSearch search, string field, Token value)
     : base(search, field)
 {
     this.value = value;
 }
Пример #25
0
 internal BinaryTerm(RiakFluentSearch search, string field, Op op, Term left, string value)
     : this(search, field, op, left, Token.Is(value))
 {
 }
Пример #26
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RiakSearchInput"/> class.
 /// </summary>
 /// <param name="query">The <see cref="RiakFluentSearch"/> to run, whose results will be used as inputs for the mapreduce job. </param>
 public RiakSearchInput(RiakFluentSearch query)
     : this(query.Index, query.ToString())
 {
 }
Пример #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="GroupTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="term">The <see cref="Term"/> group to search the <paramref name="field"/> for.</param>
 internal GroupTerm(RiakFluentSearch search, string field, Term term)
     : base(search, field)
 {
     this.term = term;
 }
Пример #28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UnaryTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="value">The value to search the <paramref name="field"/> for.</param>
 internal UnaryTerm(RiakFluentSearch search, string field, string value)
     : this(search, field, Token.Is(value))
 {
 }
Пример #29
0
 /// <summary>
 /// Initializes a new instance of the <see cref="UnaryTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="value">The <see cref="Token"/> to search the <paramref name="field"/> for.</param>
 internal UnaryTerm(RiakFluentSearch search, string field, Token value)
     : base(search, field)
 {
     this.value = value;
 }
Пример #30
0
 public UnaryTerm(RiakFluentSearch search, string field, Token value)
     : base(search, field)
 {
     _value = value;
 }
Пример #31
0
 internal BinaryTerm(RiakFluentSearch search, string field, Op op, Term left, Term right)
     : this(search, field, op, left)
 {
     this.right = right;
 }
 public RiakBucketSearchInput Filter(RiakFluentSearch filter)
 {
     return(Filter(filter.ToString()));
 }
Пример #33
0
 internal BinaryTerm(RiakFluentSearch search, string field, Op op, Term left, Token value)
     : this(search, field, op, left)
 {
     _value = value;
 }
Пример #34
0
 public GroupTerm(RiakFluentSearch search, string field, Term term)
     : base(search, field)
 {
     _term = term;
 }
Пример #35
0
 public UnaryTerm(RiakFluentSearch search, string field, Token value)
     : base(search, field)
 {
     _value = value;
 }
 /// <summary>
 /// Filter the main query with a secondary <see cref="RiakFluentSearch"/> query.
 /// </summary>
 /// <param name="filter">The secondary filter query.</param>
 /// <returns>A reference to this updated instance, for fluent chaining.</returns>
 public RiakBucketSearchInput Filter(RiakFluentSearch filter)
 {
     return Filter(filter.ToString());
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="RiakBucketSearchInput"/> class.
 /// </summary>
 /// <param name="query">The <see cref="RiakFluentSearch"/> to run, whose results will be used as inputs for the mapreduce job. </param>
 public RiakBucketSearchInput(RiakFluentSearch query)
     : this(query.Index, query.ToString())
 {
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="UnaryTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="value">The value to search the <paramref name="field"/> for.</param>
 internal UnaryTerm(RiakFluentSearch search, string field, string value)
     : this(search, field, Token.Is(value))
 {
 }
Пример #39
0
 internal BinaryTerm(RiakFluentSearch search, string field, Op op, Term left, Term right)
     : this(search, field, op, left)
 {
     _right = right;
 }
Пример #40
0
 public GroupTerm(RiakFluentSearch search, string field, Term term)
     : base(search, field)
 {
     _term = term;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="GroupTerm"/> class.
 /// </summary>
 /// <param name="search">The fluent search to add this term to.</param>
 /// <param name="field">The field to search.</param>
 /// <param name="term">The <see cref="Term"/> group to search the <paramref name="field"/> for.</param>
 internal GroupTerm(RiakFluentSearch search, string field, Term term)
     : base(search, field)
 {
     this.term = term;
 }
 public RiakBucketSearchInput(RiakFluentSearch query)
     : this(query.Bucket, query.ToString())
 {
 }