Пример #1
0
        public void Visit(ContainsNode node)
        {
            var right = Nodes.Pop();
            var left  = Nodes.Pop();

            Nodes.Push(new ContainsNode(left, right as ArgsListNode));
        }
        protected virtual QueryNode VisitContains(ContainsNode node, ElasticSearchQueryOptimizerState state)
        {
            state.Boost = 1f;
            var node2 = Visit(node.LeftNode, state);

            return(new ContainsNode(node2, Visit(node.RightNode, state), state.Boost));
        }
Пример #3
0
        public void C10_rootContainsTest()
        {
            ContainsNode root = new ContainsNode("root", null, true);

            Assert.AreNotEqual(null, root);
            Assert.AreEqual(0, root.getNbDocuments());
            Assert.AreEqual(null, root.next());
            Assert.AreEqual("root", root.getName());
            Assert.AreEqual(null, root.getParent());
        }
        // TODO: ProcessAsVirtualField? Solr does this, but not Lucene
        protected QueryBase VisitContains(ContainsNode node, ElasticQueryMapperState state)
        {
            // TODO: Move these 3 lines to separate method for reuse?
            var fieldName = GetFormattedFieldName(node);
            var valueNode = node.GetValueNode <string>();
            var value     = ValueFormatter.FormatValueForIndexStorage(valueNode.Value, fieldName);

            // TODO: Use WildcardQuery if it's a keyword field, other wise if full-text field use MatchQuery?

            return(new WildcardQuery
            {
                Field = fieldName,
                Value = "*" + value.ToStringOrEmpty() + "*",
                Boost = node.Boost
            });
        }
        protected virtual BaseQuery HandleContains(ContainsNode node, ElasticSearchQueryMapperState state)
        {
            var fieldName = GetFormattedFieldName(node);
            var valueNode = QueryHelper.GetValueNode <string>(node);

            //wildcard query values should be lowercase, even if the value is stored case-sensitively
            //not sure why it needs to be this way - and there's probably some way to make it work either way using analyzers...
            var queryValue = ValueFormatter.FormatValueForIndexStorage(valueNode.Value).ToString().ToLowerInvariant();

            //TODO: evidently, wildcard queries do not scale well for large indexes
            //therefore, this query should be replaced with something else.
            //rumor has it the use of n-gram analyzers and regular term queries works better than wildcard queries.
            //question is, how to do this in generic terms so that it works "out of the box"?
            //probably an easy way, just not today...
            return(Query.Wildcard(fieldName, "*" + queryValue + "*"));
        }
Пример #6
0
        public void C11_rootChildrensContainsTest()
        {
            ContainsNode root    = new ContainsNode("root", null, true);
            ContainsNode child1  = new ContainsNode("child1", root, true);
            ContainsNode child11 = new ContainsNode("child11", child1, true);
            ContainsNode child2  = new ContainsNode("child2", root, true);
            ContainsNode child21 = new ContainsNode("child21", child2, true);
            ContainsNode child22 = new ContainsNode("child22", child2, true);

            Assert.AreEqual("child11", child11.getName(), "child11.getDocumentName()");
            Assert.AreEqual("child1", child11.getParent().getName(), "child11.getParent()");

            Assert.AreEqual("child22", child22.getName(), "child22.getDocumentName()");
            Assert.AreEqual("child2", child22.getParent().getName(), "child22.getParent()");

            Assert.AreEqual("child2", child2.getName(), "child2.getDocumentName()");
            Assert.AreEqual("root", child2.getParent().getName(), "child2.getParent()");
        }
Пример #7
0
        public void C15_getRelativeContextTest()
        {
            ContainsNode root = new ContainsNode("root", null, true);
            ContainsNode A_1  = root.addNewNode("A[#1]", true);
            ContainsNode AA_1 = A_1.addNewNode("AA", false);

            AA_1.addNewNode("AAA[#1]", true);
            AA_1.addNewNode("AAA[#2]", true);
            ContainsNode tst_1 = AA_1.addNewNode("AAA[#3]", true);

            ContainsNode BB_1 = A_1.addNewNode("BB", true);

            BB_1.addNewNode("BBB[#1]", true);
            ContainsNode tst_2 = BB_1.addNewNode("BBB[#2]", true);

            BB_1.addNewNode("BBB[#3]", true);

            ContainsNode A_2   = root.addNewNode("A[#2]", false);
            ContainsNode AA_2  = A_2.addNewNode("AA", false);
            ContainsNode tst_3 = AA_2.addNewNode("AAA[#1]", true);

            AA_2.addNewNode("AAA[#2]", true);
            AA_2.addNewNode("AAA[#3]", true);

            ContainsNode BB_2 = A_2.addNewNode("BB", true);

            BB_2.addNewNode("BBB[#1]", true);
            BB_2.addNewNode("BBB[#2]", true);
            BB_2.addNewNode("BBB[#3]", true);
            ContainsNode tst_4 = BB_2.addNewNode("BBB[#4]", true);

            Assert.AreEqual("A[#1]//AAA[#3]", tst_1.getRelativeContext(), false, "tst_1.getRelativeContext()");
            Assert.AreEqual("A[#1]//BBB[#2]", tst_2.getRelativeContext(), false, "tst_2.getRelativeContext()");
            Assert.AreEqual("A[#2]//AAA[#1]", tst_3.getRelativeContext(), false, "tst_3.getRelativeContext()");
            Assert.AreEqual("A[#2]//BBB[#4]", tst_4.getRelativeContext(), false, "tst_4.getRelativeContext()");
        }
 public void Visit(ContainsNode node)
 {
     node.Left.Accept(this);
     node.Right.Accept(this);
     node.Accept(_visitor);
 }
 protected virtual QueryNode VisitContains(ContainsNode node, AzureQueryOptimizerState state)
 {
     return((QueryNode) new ContainsNode(this.Visit(node.LeftNode, state), this.Visit(node.RightNode, state), state.Boost));
 }
Пример #10
0
 public void Visit(ContainsNode node)
 {
 }