/// <summary> /// Finds the smallest Lev(n) DFA that accepts the term. </summary> protected override AcceptStatus Accept(BytesRef term) { //System.out.println("AFTE.accept term=" + term); int ed = matchers.Length - 1; // we are wrapping either an intersect() TermsEnum or an AutomatonTermsENum, // so we know the outer DFA always matches. // now compute exact edit distance while (ed > 0) { if (Matches(term, ed - 1)) { ed--; } else { break; } } //System.out.println("CHECK term=" + term.utf8ToString() + " ed=" + ed); // scale to a boost and return (if similarity > minSimilarity) if (ed == 0) // exact match { boostAtt.Boost = 1.0F; //System.out.println(" yes"); return(AcceptStatus.YES); } else { int codePointCount = UnicodeUtil.CodePointCount(term); float similarity = 1.0f - ((float)ed / (float)(Math.Min(codePointCount, outerInstance.m_termLength))); // LUCENENET specific - compare bits rather than using equality operators to prevent these comparisons from failing in x86 in .NET Framework with optimizations enabled if (NumericUtils.SingleToSortableInt32(similarity) > NumericUtils.SingleToSortableInt32(outerInstance.m_minSimilarity)) { boostAtt.Boost = (similarity - outerInstance.m_minSimilarity) * outerInstance.m_scaleFactor; //System.out.println(" yes"); return(AcceptStatus.YES); } else { return(AcceptStatus.NO); } } }
/// <summary> /// Finds the smallest Lev(n) DFA that accepts the term. </summary> protected override AcceptStatus Accept(BytesRef term) { //System.out.println("AFTE.accept term=" + term); int ed = matchers.Length - 1; // we are wrapping either an intersect() TermsEnum or an AutomatonTermsENum, // so we know the outer DFA always matches. // now compute exact edit distance while (ed > 0) { if (Matches(term, ed - 1)) { ed--; } else { break; } } //System.out.println("CHECK term=" + term.utf8ToString() + " ed=" + ed); // scale to a boost and return (if similarity > minSimilarity) if (ed == 0) // exact match { boostAtt.Boost = 1.0F; //System.out.println(" yes"); return(AcceptStatus.YES); } else { int codePointCount = UnicodeUtil.CodePointCount(term); float similarity = 1.0f - ((float)ed / (float)(Math.Min(codePointCount, outerInstance.m_termLength))); if (similarity > outerInstance.m_minSimilarity) { boostAtt.Boost = (similarity - outerInstance.m_minSimilarity) * outerInstance.m_scaleFactor; //System.out.println(" yes"); return(AcceptStatus.YES); } else { return(AcceptStatus.NO); } } }