【发布时间】:2014-06-23 12:37:26
【问题描述】:
我在分析器中创建了一个自定义过滤器,以按 "/" 字符分割术语。
我希望可以通过搜索找到包含"testDocument Test/mystring/2014" 之类的字符串的文档,例如"test mystring" 或"mystring 2014"。
我实现了以下过滤器:
public class MyDelimiterFilter : TokenFilter
{
private readonly ITermAttribute _termAtt;
private readonly IPositionIncrementAttribute _positionAtt;
private readonly Queue<char[]> _terms;
public WordDelimiterFilter(TokenStream inStream)
: base(inStream)
{
_termAtt = AddAttribute<ITermAttribute>();
_positionAtt = AddAttribute<IPositionIncrementAttribute>();
_terms = new Queue<char[]>();
}
public override bool IncrementToken()
{
if (_terms.Count != 0)
{
var buffer = _terms.Dequeue();
_termAtt.SetTermBuffer(buffer,0,buffer.Length);
_positionAtt.PositionIncrement = 1;
return true;
}
if (!input.IncrementToken())
{
return false;
}
if (_termAtt.Term.Contains("/"))
{
var tempArray = _termAtt.Term.Split('/');
foreach (var item in tempArray)
{
_terms.Enqueue(item.ToCharArray());
}
}
else
{
_terms.Enqueue(_termAtt.Term.ToCharArray());
}
return true;
}
}
我可以调试此代码并且逻辑路径似乎正确。如果我尝试搜索,我会找到带有 "testDocument" 或 "Test/mystring/2014" 但结果为零的文档,例如 "mystring"。
我想念什么?
【问题讨论】: