我收到了以下类型的短信。
foo bar
,
hello world
等。
我使用Edge NGram标记器创建了一个分析器,并使用它在标记下面创建的analyze api。
{
"tokens": [
{
"token": "f",
"start_offset": 0,
"end_offset": 1,
"type": "word",
"position": 1
},
{
"token": "fo",
"start_offset": 0,
"end_offset": 2,
"type": "word",
"position": 2
},
{
"token": "foo",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 3
},
{
"token": "b",
"start_offset": 4,
"end_offset": 5,
"type": "word",
"position": 4
},
{
"token": "ba",
"start_offset": 4,
"end_offset": 6,
"type": "word",
"position": 5
},
{
"token": "bar",
"start_offset": 4,
"end_offset": 7,
"type": "word",
"position": 6
}
]
}
但在我的代码中,我将文本“foo bar”传递给方法
令牌流
foo酒吧
.
这导致返回的令牌不匹配
分析
添加一个char过滤器,该过滤器移除文本中的空格,并对文本中的各个术语应用Edge NGram标记器。
所以,在
例如,它应该创建下面的标记。当我打电话
令牌流
方法。
f、 fo,foo,b,ba,酒吧。
我尝试将char过滤器添加到创建分析器的java代码中。下面是它的代码。
@Override
public TokenStream tokenStream(String fieldName, Reader reader) {
NormalizeCharMap normalizeCharMap = new NormalizeCharMap();
normalizeCharMap.add(" ", "\\u2424");
Reader replaceDots = new MappingCharFilter(normalizeCharMap, reader);
TokenStream result = new EdgeNGramTokenizer(replaceDots, EdgeNGramTokenizer.DEFAULT_SIDE, 1, 30);
return result;
}
但它需要
lu2424
就像它一样。也请让我知道我的代码分析器是否正确?