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