Greetings,

 

I hope I have this all wrong;  I haven't seen this issue raised. 

 

At index time term vectors are sorted using String.CompareOrdinal.
However method IndexOf  of class SegmentTermVector invokes
System.Array.BinarySearch, which is using String.Compare:

 

public virtual int IndexOf(System.String termText)

{

                                if (terms == null)

                                                return - 1;

int res = System.Array.BinarySearch(terms, termText);

return res >= 0 ? res : - 1;

}

 

 

As implemented this method always (for me, anyway) returns a negative
number.  The modification below works, but I need to know if this is
actually a bug and if so, what is the correct fix.

 

 

public class SegmentTermVector : TermFreqVector

{

                . . .

 

private class TermVectorComparer : System.Collections.IComparer 

{

public int Compare(object a, object b)

{                

return String.CompareOrdinal((string)a, (string)b);            

}

}

 

public virtual int IndexOf(System.String termText)

{

                                if (terms == null)

                                                return - 1;

int res = System.Array.BinarySearch(terms, termText, new
TermVectorComparer());

return res >= 0 ? res : - 1;

}

                

. . . 

}

 

 

Franklin Simmons

 

Reply via email to