public SearchPhrase ( String fieldName, List |
||
fieldName | String | |
phraseCandidate | List |
|
return | QueryPhraseMap |
public void TestSearchPhraseSlop() { // "a b c"~0 Query query = PqF("a", "b", "c"); // phraseHighlight = true, fieldMatch = true FieldQuery fq = new FieldQuery(query, true, true); // "a b c" w/ position-gap = 2 List <TermInfo> phraseCandidate = new List <TermInfo>(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); phraseCandidate.Add(new TermInfo("b", 2, 3, 2)); phraseCandidate.Add(new TermInfo("c", 4, 5, 4)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c"~1 query = pqF(1F, 1, "a", "b", "c"); // phraseHighlight = true, fieldMatch = true fq = new FieldQuery(query, true, true); // "a b c" w/ position-gap = 2 Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); // "a b c" w/ position-gap = 3 phraseCandidate.Clear(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); phraseCandidate.Add(new TermInfo("b", 2, 3, 3)); phraseCandidate.Add(new TermInfo("c", 4, 5, 6)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); }
/// <summary> /// a constructor. /// </summary> /// <param name="fieldTermStack">FieldTermStack object</param> /// <param name="fieldQuery">FieldQuery object</param> public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) { String field = fieldTermStack.GetFieldName(); LinkedList<TermInfo> phraseCandidate = new LinkedList<TermInfo>(); QueryPhraseMap currMap = null; QueryPhraseMap nextMap = null; while (!fieldTermStack.IsEmpty()) { phraseCandidate.Clear(); TermInfo ti = fieldTermStack.Pop(); currMap = fieldQuery.GetFieldTermMap(field, ti.GetText()); // if not found, discard top TermInfo from stack, then try next element if (currMap == null) continue; // if found, search the longest phrase phraseCandidate.AddLast(ti); while (true) { ti = fieldTermStack.Pop(); nextMap = null; if (ti != null) nextMap = currMap.GetTermMap(ti.GetText()); if (ti == null || nextMap == null) { if (ti != null) fieldTermStack.Push(ti); if (currMap.IsValidTermOrPhrase(new List<TermInfo>(phraseCandidate))) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); } else { while (phraseCandidate.Count > 1) { TermInfo last = phraseCandidate.Last.Value; phraseCandidate.RemoveLast(); fieldTermStack.Push(last); currMap = fieldQuery.SearchPhrase(field, new List<TermInfo>(phraseCandidate)); if (currMap != null) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); break; } } } break; } else { phraseCandidate.AddLast(ti); currMap = nextMap; } } } }
public void TestSearchPhrase() { Query query = PqF("a", "b", "c"); // phraseHighlight = true, fieldMatch = true FieldQuery fq = new FieldQuery(query, true, true); // "a" List <TermInfo> phraseCandidate = new List <TermInfo>(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b" phraseCandidate.Add(new TermInfo("b", 2, 3, 1)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c" phraseCandidate.Add(new TermInfo("c", 4, 5, 2)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); Assert.Null(fq.SearchPhrase("x", phraseCandidate)); // phraseHighlight = true, fieldMatch = false fq = new FieldQuery(query, true, false); // "a b c" Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); //{{DIGY - Failing test.}} Assert.NotNull(fq.SearchPhrase("x", phraseCandidate)); //{{DIGY - Failing test.}} //{{DIGY- this may be related with the difference of List implemantation between Java & .NET //Java version accepts "null" as a value. It is not a show stopper.}} // phraseHighlight = false, fieldMatch = true fq = new FieldQuery(query, false, true); // "a" phraseCandidate.Clear(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); // "a b" phraseCandidate.Add(new TermInfo("b", 2, 3, 1)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c" phraseCandidate.Add(new TermInfo("c", 4, 5, 2)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); Assert.Null(fq.SearchPhrase("x", phraseCandidate)); }
public void TestSearchPhraseSlop() { // "a b c"~0 Query query = PqF("a", "b", "c"); // phraseHighlight = true, fieldMatch = true FieldQuery fq = new FieldQuery(query, true, true); // "a b c" w/ position-gap = 2 List<TermInfo> phraseCandidate = new List<TermInfo>(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); phraseCandidate.Add(new TermInfo("b", 2, 3, 2)); phraseCandidate.Add(new TermInfo("c", 4, 5, 4)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c"~1 query = pqF(1F, 1, "a", "b", "c"); // phraseHighlight = true, fieldMatch = true fq = new FieldQuery(query, true, true); // "a b c" w/ position-gap = 2 Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); // "a b c" w/ position-gap = 3 phraseCandidate.Clear(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); phraseCandidate.Add(new TermInfo("b", 2, 3, 3)); phraseCandidate.Add(new TermInfo("c", 4, 5, 6)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); }
public void TestSearchPhrase() { Query query = PqF("a", "b", "c"); // phraseHighlight = true, fieldMatch = true FieldQuery fq = new FieldQuery(query, true, true); // "a" List<TermInfo> phraseCandidate = new List<TermInfo>(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b" phraseCandidate.Add(new TermInfo("b", 2, 3, 1)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c" phraseCandidate.Add(new TermInfo("c", 4, 5, 2)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); Assert.Null(fq.SearchPhrase("x", phraseCandidate)); // phraseHighlight = true, fieldMatch = false fq = new FieldQuery(query, true, false); // "a b c" Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); //{{DIGY - Failing test.}} Assert.NotNull(fq.SearchPhrase("x", phraseCandidate)); //{{DIGY - Failing test.}} //{{DIGY- this may be related with the difference of List implemantation between Java & .NET //Java version accepts "null" as a value. It is not a show stopper.}} // phraseHighlight = false, fieldMatch = true fq = new FieldQuery(query, false, true); // "a" phraseCandidate.Clear(); phraseCandidate.Add(new TermInfo("a", 0, 1, 0)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); // "a b" phraseCandidate.Add(new TermInfo("b", 2, 3, 1)); Assert.Null(fq.SearchPhrase(F, phraseCandidate)); // "a b c" phraseCandidate.Add(new TermInfo("c", 4, 5, 2)); Assert.NotNull(fq.SearchPhrase(F, phraseCandidate)); Assert.Null(fq.SearchPhrase("x", phraseCandidate)); }
/// <summary> /// a constructor. /// </summary> /// <param name="fieldTermStack">FieldTermStack object</param> /// <param name="fieldQuery">FieldQuery object</param> public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) { String field = fieldTermStack.GetFieldName(); LinkedList <TermInfo> phraseCandidate = new LinkedList <TermInfo>(); QueryPhraseMap currMap = null; QueryPhraseMap nextMap = null; while (!fieldTermStack.IsEmpty()) { phraseCandidate.Clear(); TermInfo ti = fieldTermStack.Pop(); currMap = fieldQuery.GetFieldTermMap(field, ti.GetText()); // if not found, discard top TermInfo from stack, then try next element if (currMap == null) { continue; } // if found, search the longest phrase phraseCandidate.AddLast(ti); while (true) { ti = fieldTermStack.Pop(); nextMap = null; if (ti != null) { nextMap = currMap.GetTermMap(ti.GetText()); } if (ti == null || nextMap == null) { if (ti != null) { fieldTermStack.Push(ti); } if (currMap.IsValidTermOrPhrase(new List <TermInfo>(phraseCandidate))) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); } else { while (phraseCandidate.Count > 1) { TermInfo last = phraseCandidate.Last.Value; phraseCandidate.RemoveLast(); fieldTermStack.Push(last); currMap = fieldQuery.SearchPhrase(field, new List <TermInfo>(phraseCandidate)); if (currMap != null) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); break; } } } break; } else { phraseCandidate.AddLast(ti); currMap = nextMap; } } } }