Пример #1
0
        public void TestQueryPhraseMap1PhraseAnother()
        {
            // LUCENENET specific - altered some of the tests because
            // dictionaries throw KeyNotFoundException rather than returning null.

            Query query = pqF("search", "engines");

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["search"]);
            QueryPhraseMap qpm2 = qpm.subMap["search"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["engines"]);
            QueryPhraseMap qpm3 = qpm2.subMap["engines"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);
        }
Пример #2
0
        public void TestQueryPhraseMap1PhraseAnother()
        {
            Query query = pqF("search", "engines");

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["search"]);
            QueryPhraseMap qpm2 = qpm.subMap["search"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["engines"]);
            QueryPhraseMap qpm3 = qpm2.subMap["engines"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);
        }
Пример #3
0
        public void TestQueryPhraseMapOverlapPhrases()
        {
            BooleanQuery query = new BooleanQuery();

            query.Add(pqF("a", "b", "c"), Occur.SHOULD);
            query.Add(pqF(2, "b", "c", "d"), Occur.SHOULD);
            query.Add(pqF(3, "b", "d"), Occur.SHOULD);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(2, qpm.subMap.size());

            // "a b c"
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            QueryPhraseMap qpm3 = qpm2.subMap["b"];

            assertFalse(qpm3.terminal);
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["c"]);
            QueryPhraseMap qpm4 = qpm3.subMap["c"];

            assertTrue(qpm4.terminal);
            assertEquals(1F, qpm4.boost, 0);
            assertNotNull(qpm4.subMap["d"]);
            QueryPhraseMap qpm5 = qpm4.subMap["d"];

            assertTrue(qpm5.terminal);
            assertEquals(1F, qpm5.boost, 0);

            // "b c d"^2, "b d"^3
            assertNotNull(qpm.subMap["b"]);
            qpm2 = qpm.subMap["b"];
            assertFalse(qpm2.terminal);
            assertEquals(2, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["c"]);
            qpm3 = qpm2.subMap["c"];
            assertFalse(qpm3.terminal);
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["d"]);
            qpm4 = qpm3.subMap["d"];
            assertTrue(qpm4.terminal);
            assertEquals(2F, qpm4.boost, 0);
            assertNotNull(qpm2.subMap["d"]);
            qpm3 = qpm2.subMap["d"];
            assertTrue(qpm3.terminal);
            assertEquals(3F, qpm3.boost, 0);
        }
Пример #4
0
        public void TestQueryPhraseMapOverlapPhrases3()
        {
            // LUCENENET specific - altered some of the tests because
            // dictionaries throw KeyNotFoundException rather than returning null.

            BooleanQuery query = new BooleanQuery();

            query.Add(pqF("a", "a", "a", "a"), Occur.SHOULD);
            query.Add(pqF(2, "a", "a", "a"), Occur.SHOULD);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());

            // "a a a"
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["a"]);
            QueryPhraseMap qpm3 = qpm2.subMap["a"];

            assertFalse(qpm3.terminal);
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["a"]);
            QueryPhraseMap qpm4 = qpm3.subMap["a"];

            assertTrue(qpm4.terminal);

            // "a a a a"
            assertEquals(1, qpm4.subMap.size());
            assertNotNull(qpm4.subMap["a"]);
            QueryPhraseMap qpm5 = qpm4.subMap["a"];

            assertTrue(qpm5.terminal);

            // "a a a a a"
            assertEquals(1, qpm5.subMap.size());
            assertNotNull(qpm5.subMap["a"]);
            QueryPhraseMap qpm6 = qpm5.subMap["a"];

            assertTrue(qpm6.terminal);

            // "a a a a a a"
            assertEquals(1, qpm6.subMap.size());
            assertNotNull(qpm6.subMap["a"]);
            QueryPhraseMap qpm7 = qpm6.subMap["a"];

            assertTrue(qpm7.terminal);
        }
Пример #5
0
        public void TestQueryPhraseMapOverlapPhrases3()
        {
            BooleanQuery query = new BooleanQuery();

            query.Add(pqF("a", "a", "a", "a"), Occur.SHOULD);
            query.Add(pqF(2, "a", "a", "a"), Occur.SHOULD);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());

            // "a a a"
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["a"]);
            QueryPhraseMap qpm3 = qpm2.subMap["a"];

            assertFalse(qpm3.terminal);
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["a"]);
            QueryPhraseMap qpm4 = qpm3.subMap["a"];

            assertTrue(qpm4.terminal);

            // "a a a a"
            assertEquals(1, qpm4.subMap.size());
            assertNotNull(qpm4.subMap["a"]);
            QueryPhraseMap qpm5 = qpm4.subMap["a"];

            assertTrue(qpm5.terminal);

            // "a a a a a"
            assertEquals(1, qpm5.subMap.size());
            assertNotNull(qpm5.subMap["a"]);
            QueryPhraseMap qpm6 = qpm5.subMap["a"];

            assertTrue(qpm6.terminal);

            // "a a a a a a"
            assertEquals(1, qpm6.subMap.size());
            assertNotNull(qpm6.subMap["a"]);
            QueryPhraseMap qpm7 = qpm6.subMap["a"];

            assertTrue(qpm7.terminal);
        }
Пример #6
0
        private void defgMultiTermQueryTest(Query query)
        {
            FieldQuery     fq  = new FieldQuery(query, reader, true, true);
            QueryPhraseMap qpm = fq.GetFieldTermMap(F, "defg");

            assertNotNull(qpm);
            assertNull(fq.GetFieldTermMap(F, "dog"));
            List <TermInfo> phraseCandidate = new List <TermInfo>();

            phraseCandidate.Add(new TermInfo("defg", 0, 12, 0, 1));
            assertNotNull(fq.SearchPhrase(F, phraseCandidate));
        }
Пример #7
0
        public void TestGetRootMapNotFieldMatch()
        {
            Query      dummy = pqF("DUMMY");
            FieldQuery fq    = new FieldQuery(dummy, true, false);

            QueryPhraseMap rootMap1 = fq.GetRootMap(tq("a"));
            QueryPhraseMap rootMap2 = fq.GetRootMap(tq("a"));

            assertTrue(rootMap1 == rootMap2);
            QueryPhraseMap rootMap3 = fq.GetRootMap(tq("b"));

            assertTrue(rootMap1 == rootMap3);
            QueryPhraseMap rootMap4 = fq.GetRootMap(tq(F1, "b"));

            assertTrue(rootMap4 == rootMap3);
        }
Пример #8
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;
                    }
                }
            }
        }
Пример #9
0
        public void TestQueryPhraseMapOverlap2gram()
        {
            // LUCENENET specific - altered some of the tests because
            // dictionaries throw KeyNotFoundException rather than returning null.

            BooleanQuery query = new BooleanQuery();

            query.Add(toPhraseQuery(analyze("abc", F, analyzerB), F), Occur.MUST);
            query.Add(toPhraseQuery(analyze("bcd", F, analyzerB), F), Occur.MUST);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(2, qpm.subMap.size());

            // "ab bc"
            assertNotNull(qpm.subMap["ab"]);
            QueryPhraseMap qpm2 = qpm.subMap["ab"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["bc"]);
            QueryPhraseMap qpm3 = qpm2.subMap["bc"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "ab bc cd"
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["cd"]);
            QueryPhraseMap qpm4 = qpm3.subMap["cd"];

            assertTrue(qpm4.terminal);
            assertEquals(1F, qpm4.boost, 0);

            // "bc cd"
            assertNotNull(qpm.subMap["bc"]);
            qpm2 = qpm.subMap["bc"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["cd"]);
            qpm3 = qpm2.subMap["cd"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // phraseHighlight = false, fieldMatch = true
            fq  = new FieldQuery(query, false, true);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            qpm = map[F];
            assertEquals(3, qpm.subMap.size());

            // "ab bc"
            assertNotNull(qpm.subMap["ab"]);
            qpm2 = qpm.subMap["ab"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["bc"]);
            qpm3 = qpm2.subMap["bc"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "ab bc cd"
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["cd"]);
            qpm4 = qpm3.subMap["cd"];
            assertTrue(qpm4.terminal);
            assertEquals(1F, qpm4.boost, 0);

            // "bc cd"
            assertNotNull(qpm.subMap["bc"]);
            qpm2 = qpm.subMap["bc"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["cd"]);
            qpm3 = qpm2.subMap["cd"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "cd"
            assertNotNull(qpm.subMap["cd"]);
            qpm2 = qpm.subMap["cd"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(0, qpm2.subMap.size());
        }
Пример #10
0
        public void TestQueryPhraseMap2PhrasesFields()
        {
            // LUCENENET specific - altered some of the tests because
            // dictionaries throw KeyNotFoundException rather than returning null.

            BooleanQuery query = new BooleanQuery();

            query.Add(pq(F1, "a", "b"), Occur.SHOULD);
            query.Add(pq(2F, F2, "c", "d"), Occur.SHOULD);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(2, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);

            // "a b"
            assertNotNull(map[F1]);
            QueryPhraseMap qpm = map[F1];

            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            QueryPhraseMap qpm3 = qpm2.subMap["b"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "c d"^2
            assertNotNull(map[F2]);
            qpm = map[F2];
            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["c"]);
            qpm2 = qpm.subMap["c"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["d"]);
            qpm3 = qpm2.subMap["d"];
            assertTrue(qpm3.terminal);
            assertEquals(2F, qpm3.boost, 0);

            // phraseHighlight = true, fieldMatch = false
            fq  = new FieldQuery(query, true, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(F1, out _)); // assertNull(map[F1]);
            assertFalse(map.TryGetValue(F2, out _)); // assertNull(map[F2]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(2, qpm.subMap.size());

            // "a b"
            assertNotNull(qpm.subMap["a"]);
            qpm2 = qpm.subMap["a"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            qpm3 = qpm2.subMap["b"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "c d"^2
            assertNotNull(qpm.subMap["c"]);
            qpm2 = qpm.subMap["c"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["d"]);
            qpm3 = qpm2.subMap["d"];
            assertTrue(qpm3.terminal);
            assertEquals(2F, qpm3.boost, 0);
        }
Пример #11
0
        public void TestQueryPhraseMap1Term()
        {
            // LUCENENET specific - altered some of the tests because
            // dictionaries throw KeyNotFoundException rather than returning null.

            Query query = tq("a");

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());
            assertTrue(qpm.subMap["a"] != null);
            assertTrue(qpm.subMap["a"].terminal);
            assertEquals(1F, qpm.subMap["a"].boost, 0);

            // phraseHighlight = true, fieldMatch = false
            fq  = new FieldQuery(query, true, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(F, out _)); // assertNull(map[F]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(1, qpm.subMap.size());
            assertTrue(qpm.subMap["a"] != null);
            assertTrue(qpm.subMap["a"].terminal);
            assertEquals(1F, qpm.subMap["a"].boost, 0);

            // phraseHighlight = false, fieldMatch = true
            fq  = new FieldQuery(query, false, true);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(null, out _)); // assertNull(map[null]);
            assertNotNull(map[F]);
            qpm = map[F];
            assertEquals(1, qpm.subMap.size());
            assertTrue(qpm.subMap["a"] != null);
            assertTrue(qpm.subMap["a"].terminal);
            assertEquals(1F, qpm.subMap["a"].boost, 0);

            // phraseHighlight = false, fieldMatch = false
            fq  = new FieldQuery(query, false, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertFalse(map.TryGetValue(F, out _)); // assertNull(map[F]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(1, qpm.subMap.size());
            assertTrue(qpm.subMap["a"] != null);
            assertTrue(qpm.subMap["a"].terminal);
            assertEquals(1F, qpm.subMap["a"].boost, 0);

            // boost != 1
            query = tq(2, "a");
            fq    = new FieldQuery(query, true, true);
            map   = fq.rootMaps;
            qpm   = map[F];
            assertEquals(2F, qpm.subMap["a"].boost, 0);
        }
Пример #12
0
        public void TestQueryPhraseMapOverlap2gram()
        {
            BooleanQuery query = new BooleanQuery();

            query.Add(toPhraseQuery(analyze("abc", F, analyzerB), F), Occur.MUST);
            query.Add(toPhraseQuery(analyze("bcd", F, analyzerB), F), Occur.MUST);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(2, qpm.subMap.size());

            // "ab bc"
            assertNotNull(qpm.subMap["ab"]);
            QueryPhraseMap qpm2 = qpm.subMap["ab"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["bc"]);
            QueryPhraseMap qpm3 = qpm2.subMap["bc"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "ab bc cd"
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["cd"]);
            QueryPhraseMap qpm4 = qpm3.subMap["cd"];

            assertTrue(qpm4.terminal);
            assertEquals(1F, qpm4.boost, 0);

            // "bc cd"
            assertNotNull(qpm.subMap["bc"]);
            qpm2 = qpm.subMap["bc"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["cd"]);
            qpm3 = qpm2.subMap["cd"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // phraseHighlight = false, fieldMatch = true
            fq  = new FieldQuery(query, false, true);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            qpm = map[F];
            assertEquals(3, qpm.subMap.size());

            // "ab bc"
            assertNotNull(qpm.subMap["ab"]);
            qpm2 = qpm.subMap["ab"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["bc"]);
            qpm3 = qpm2.subMap["bc"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "ab bc cd"
            assertEquals(1, qpm3.subMap.size());
            assertNotNull(qpm3.subMap["cd"]);
            qpm4 = qpm3.subMap["cd"];
            assertTrue(qpm4.terminal);
            assertEquals(1F, qpm4.boost, 0);

            // "bc cd"
            assertNotNull(qpm.subMap["bc"]);
            qpm2 = qpm.subMap["bc"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["cd"]);
            qpm3 = qpm2.subMap["cd"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "cd"
            assertNotNull(qpm.subMap["cd"]);
            qpm2 = qpm.subMap["cd"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(0, qpm2.subMap.size());
        }
Пример #13
0
        public void TestQueryPhraseMap2PhrasesFields()
        {
            BooleanQuery query = new BooleanQuery();

            query.Add(pq(F1, "a", "b"), Occur.SHOULD);
            query.Add(pq(2F, F2, "c", "d"), Occur.SHOULD);

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(2, map.size());
            assertNull(map[null]);

            // "a b"
            assertNotNull(map[F1]);
            QueryPhraseMap qpm = map[F1];

            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            QueryPhraseMap qpm3 = qpm2.subMap["b"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "c d"^2
            assertNotNull(map[F2]);
            qpm = map[F2];
            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["c"]);
            qpm2 = qpm.subMap["c"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["d"]);
            qpm3 = qpm2.subMap["d"];
            assertTrue(qpm3.terminal);
            assertEquals(2F, qpm3.boost, 0);

            // phraseHighlight = true, fieldMatch = false
            fq  = new FieldQuery(query, true, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertNull(map[F1]);
            assertNull(map[F2]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(2, qpm.subMap.size());

            // "a b"
            assertNotNull(qpm.subMap["a"]);
            qpm2 = qpm.subMap["a"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            qpm3 = qpm2.subMap["b"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // "c d"^2
            assertNotNull(qpm.subMap["c"]);
            qpm2 = qpm.subMap["c"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["d"]);
            qpm3 = qpm2.subMap["d"];
            assertTrue(qpm3.terminal);
            assertEquals(2F, qpm3.boost, 0);
        }
Пример #14
0
        public void TestQueryPhraseMap1Phrase()
        {
            Query query = pqF("a", "b");

            // phraseHighlight = true, fieldMatch = true
            FieldQuery fq = new FieldQuery(query, true, true);
            IDictionary <String, QueryPhraseMap> map = fq.rootMaps;

            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            QueryPhraseMap qpm = map[F];

            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            QueryPhraseMap qpm2 = qpm.subMap["a"];

            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            QueryPhraseMap qpm3 = qpm2.subMap["b"];

            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // phraseHighlight = true, fieldMatch = false
            fq  = new FieldQuery(query, true, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertNull(map[F]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(1, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            qpm2 = qpm.subMap["a"];
            assertFalse(qpm2.terminal);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            qpm3 = qpm2.subMap["b"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            // phraseHighlight = false, fieldMatch = true
            fq  = new FieldQuery(query, false, true);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertNull(map[null]);
            assertNotNull(map[F]);
            qpm = map[F];
            assertEquals(2, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            qpm2 = qpm.subMap["a"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            qpm3 = qpm2.subMap["b"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            assertNotNull(qpm.subMap["b"]);
            qpm2 = qpm.subMap["b"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);

            // phraseHighlight = false, fieldMatch = false
            fq  = new FieldQuery(query, false, false);
            map = fq.rootMaps;
            assertEquals(1, map.size());
            assertNull(map[F]);
            assertNotNull(map[null]);
            qpm = map[null];
            assertEquals(2, qpm.subMap.size());
            assertNotNull(qpm.subMap["a"]);
            qpm2 = qpm.subMap["a"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);
            assertEquals(1, qpm2.subMap.size());
            assertNotNull(qpm2.subMap["b"]);
            qpm3 = qpm2.subMap["b"];
            assertTrue(qpm3.terminal);
            assertEquals(1F, qpm3.boost, 0);

            assertNotNull(qpm.subMap["b"]);
            qpm2 = qpm.subMap["b"];
            assertTrue(qpm2.terminal);
            assertEquals(1F, qpm2.boost, 0);

            // boost != 1
            query = pqF(2, "a", "b");
            // phraseHighlight = false, fieldMatch = false
            fq   = new FieldQuery(query, false, false);
            map  = fq.rootMaps;
            qpm  = map[null];
            qpm2 = qpm.subMap["a"];
            assertEquals(2F, qpm2.boost, 0);
            qpm3 = qpm2.subMap["b"];
            assertEquals(2F, qpm3.boost, 0);
            qpm2 = qpm.subMap["b"];
            assertEquals(2F, qpm2.boost, 0);
        }