Example #1
0
        public void Test1TermB()
        {
            makeIndexB();

            FieldQuery     fq    = new FieldQuery(tq("ab"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(2, stack.termList.size());
            assertEquals("ab(2,4,2)", stack.Pop().toString());
            assertEquals("ab(6,8,6)", stack.Pop().toString());
        }
Example #2
0
        public void TestFieldTermStackIndex1w2wSearch1phrase()
        {
            makeIndex1w2w();

            FieldQuery     fq    = new FieldQuery(pqF("personal", "computer"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(2, stack.termList.size());
            assertEquals("personal(3,5,1)", stack.Pop().toString());
            assertEquals("computer(3,5,2)", stack.Pop().toString());
        }
Example #3
0
        public void TestWildcard()
        {
            makeIndexLongMV();
            FieldQuery     fq    = new FieldQuery(new WildcardQuery(new Term(F, "th*e")), reader, true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(4, stack.termList.size());
            assertEquals("the(15,18,2)", stack.Pop().toString());
            assertEquals("these(133,138,20)", stack.Pop().toString());
            assertEquals("the(153,156,23)", stack.Pop().toString());
            assertEquals("the(195,198,31)", stack.Pop().toString());
        }
Example #4
0
        public void Test1Phrase()
        {
            makeIndex();

            FieldQuery     fq    = new FieldQuery(pqF("c", "d"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(3, stack.termList.size());
            assertEquals("c(10,11,5)", stack.Pop().toString());
            assertEquals("c(18,19,9)", stack.Pop().toString());
            assertEquals("d(20,21,10)", stack.Pop().toString());
        }
Example #5
0
        public void Test1PhraseMVB()
        {
            makeIndexLongMVB();

            FieldQuery     fq    = new FieldQuery(pqF("sp", "pe", "ee", "ed"), true, true); // "speed" -(2gram)-> "sp","pe","ee","ed"
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(4, stack.termList.size());
            assertEquals("sp(88,90,61)", stack.Pop().toString());
            assertEquals("pe(89,91,62)", stack.Pop().toString());
            assertEquals("ee(90,92,63)", stack.Pop().toString());
            assertEquals("ed(91,93,64)", stack.Pop().toString());
        }
Example #6
0
        public void Test1PhraseLongMV()
        {
            makeIndexLongMV();

            FieldQuery     fq    = new FieldQuery(pqF("search", "engines"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(4, stack.termList.size());
            assertEquals("search(102,108,14)", stack.Pop().toString());
            assertEquals("engines(109,116,15)", stack.Pop().toString());
            assertEquals("search(157,163,24)", stack.Pop().toString());
            assertEquals("engines(164,171,25)", stack.Pop().toString());
        }
Example #7
0
        public void Test1PhraseB()
        {
            makeIndexB();

            FieldQuery     fq    = new FieldQuery(pqF("ab", "bb"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(4, stack.termList.size());
            assertEquals("ab(2,4,2)", stack.Pop().toString());
            assertEquals("bb(3,5,3)", stack.Pop().toString());
            assertEquals("ab(6,8,6)", stack.Pop().toString());
            assertEquals("bb(7,9,7)", stack.Pop().toString());
        }
Example #8
0
        public void Test2TermsB()
        {
            makeIndexB();

            BooleanQuery query = new BooleanQuery();

            query.Add(tq("bc"), Occur.SHOULD);
            query.Add(tq("ef"), Occur.SHOULD);
            FieldQuery     fq    = new FieldQuery(query, true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(3, stack.termList.size());
            assertEquals("bc(4,6,4)", stack.Pop().toString());
            assertEquals("bc(8,10,8)", stack.Pop().toString());
            assertEquals("ef(11,13,11)", stack.Pop().toString());
        }
Example #9
0
        public void TestFieldTermStackIndex1w2wSearch1term1phrase()
        {
            makeIndex1w2w();

            BooleanQuery bq = new BooleanQuery();

            bq.Add(tq("pc"), Occur.SHOULD);
            bq.Add(pqF("personal", "computer"), Occur.SHOULD);
            FieldQuery     fq    = new FieldQuery(bq, true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(2, stack.termList.size());
            TermInfo ti = stack.Pop();

            assertEquals("pc(3,5,1)", ti.toString());
            assertEquals("personal(3,5,1)", ti.Next.toString());
            assertSame(ti, ti.Next.Next);
            assertEquals("computer(3,5,2)", stack.Pop().toString());
        }
Example #10
0
        public void TestFieldTermStackIndex1w2wSearch1partial()
        {
            makeIndex1w2w();

            FieldQuery     fq    = new FieldQuery(tq("computer"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(1, stack.termList.size());
            assertEquals("computer(3,5,2)", stack.Pop().toString());
        }
Example #11
0
        public void TestFieldTermStackIndex1wSearch1term()
        {
            makeIndex1w();

            FieldQuery     fq    = new FieldQuery(tq("Mac"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(1, stack.termList.size());
            assertEquals("Mac(11,20,3)", stack.Pop().toString());
        }
Example #12
0
        public void Test1PhraseShortMV()
        {
            makeIndexShortMV();

            FieldQuery     fq    = new FieldQuery(tq("d"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(1, stack.termList.size());
            assertEquals("d(9,10,3)", stack.Pop().toString());
        }
Example #13
0
        public void TestFieldTermStackIndex1wSearch2terms()
        {
            makeIndex1w();

            BooleanQuery bq = new BooleanQuery();

            bq.Add(tq("Mac"), Occur.SHOULD);
            bq.Add(tq("MacBook"), Occur.SHOULD);
            FieldQuery     fq    = new FieldQuery(bq, true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(1, stack.termList.size());
            TermInfo ti = stack.Pop();

            assertEquals("Mac(11,20,3)", ti.toString());
            assertEquals("MacBook(11,20,3)", ti.Next.toString());
            assertSame(ti, ti.Next.Next);
        }
Example #14
0
        public void Test2Terms()
        {
            makeIndex();

            BooleanQuery query = new BooleanQuery();

            query.Add(tq("b"), Occur.SHOULD);
            query.Add(tq("c"), Occur.SHOULD);
            FieldQuery     fq    = new FieldQuery(query, true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(8, stack.termList.size());
            assertEquals("b(6,7,3)", stack.Pop().toString());
            assertEquals("b(8,9,4)", stack.Pop().toString());
            assertEquals("c(10,11,5)", stack.Pop().toString());
            assertEquals("b(14,15,7)", stack.Pop().toString());
            assertEquals("b(16,17,8)", stack.Pop().toString());
            assertEquals("c(18,19,9)", stack.Pop().toString());
            assertEquals("b(26,27,13)", stack.Pop().toString());
            assertEquals("b(30,31,15)", stack.Pop().toString());
        }
Example #15
0
        public void Test1Term()
        {
            makeIndex();

            FieldQuery     fq    = new FieldQuery(tq("a"), true, true);
            FieldTermStack stack = new FieldTermStack(reader, 0, F, fq);

            assertEquals(6, stack.termList.size());
            assertEquals("a(0,1,0)", stack.Pop().toString());
            assertEquals("a(2,3,1)", stack.Pop().toString());
            assertEquals("a(4,5,2)", stack.Pop().toString());
            assertEquals("a(12,13,6)", stack.Pop().toString());
            assertEquals("a(28,29,14)", stack.Pop().toString());
            assertEquals("a(32,33,16)", stack.Pop().toString());
        }
Example #16
0
        /// <summary>
        /// a constructor.
        /// </summary>
        /// <param name="fieldTermStack"><see cref="FieldTermStack"/> object</param>
        /// <param name="fieldQuery"><see cref="FieldQuery"/> object</param>
        /// <param name="phraseLimit">maximum size of phraseList</param>
        public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery, int phraseLimit)
        {
            string field = fieldTermStack.FieldName;

            List <TermInfo> phraseCandidate = new List <TermInfo>();
            QueryPhraseMap  currMap         = null;
            QueryPhraseMap  nextMap         = null;

            while (!fieldTermStack.IsEmpty && (phraseList.Count < phraseLimit))
            {
                phraseCandidate.Clear();

                TermInfo ti    = null;
                TermInfo first = null;

                first   = ti = fieldTermStack.Pop();
                currMap = fieldQuery.GetFieldTermMap(field, ti.Text);
                while (currMap == null && ti.Next != first)
                {
                    ti      = ti.Next;
                    currMap = fieldQuery.GetFieldTermMap(field, ti.Text);
                }

                // if not found, discard top TermInfo from stack, then try next element
                if (currMap == null)
                {
                    continue;
                }

                // if found, search the longest phrase
                phraseCandidate.Add(ti);
                while (true)
                {
                    first   = ti = fieldTermStack.Pop();
                    nextMap = null;
                    if (ti != null)
                    {
                        nextMap = currMap.GetTermMap(ti.Text);
                        while (nextMap == null && ti.Next != first)
                        {
                            ti      = ti.Next;
                            nextMap = currMap.GetTermMap(ti.Text);
                        }
                    }
                    if (ti == null || nextMap == null)
                    {
                        if (ti != null)
                        {
                            fieldTermStack.Push(ti);
                        }
                        if (currMap.IsValidTermOrPhrase(phraseCandidate))
                        {
                            AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.Boost, currMap.TermOrPhraseNumber));
                        }
                        else
                        {
                            while (phraseCandidate.Count > 1)
                            {
                                //fieldTermStack.Push(phraseCandidate.Last.Value);
                                //phraseCandidate.RemoveLast();

                                TermInfo last = phraseCandidate[phraseCandidate.Count - 1];
                                phraseCandidate.Remove(last);
                                fieldTermStack.Push(last);

                                currMap = fieldQuery.SearchPhrase(field, phraseCandidate);
                                if (currMap != null)
                                {
                                    AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.Boost, currMap.TermOrPhraseNumber));
                                    break;
                                }
                            }
                        }
                        break;
                    }
                    else
                    {
                        phraseCandidate.Add(ti);
                        currMap = nextMap;
                    }
                }
            }
        }