Java 使用lucene同义词筛选器时无法标记单词
如果我使用这个同义词分析器,并且搜索dns是down,则形成的查询是+n:domain-name-system+n:is+n:down。域名系统未标记为单独的标记,但我需要将其作为单独的标记。添加多单词同义词时,需要使用同义词映射将单词分隔。单词分隔符:Java 使用lucene同义词筛选器时无法标记单词,java,lucene,Java,Lucene,如果我使用这个同义词分析器,并且搜索dns是down,则形成的查询是+n:domain-name-system+n:is+n:down。域名系统未标记为单独的标记,但我需要将其作为单独的标记。添加多单词同义词时,需要使用同义词映射将单词分隔。单词分隔符: public class SynonymAnalyzer extends Analyzer { @Override protected TokenStreamComponents createComponents(Strin
public class SynonymAnalyzer extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String s, Reader reader) {
SynonymMap synonymMap = null;
SynonymMap.Builder builder=null;
try {
addTo(builder,new String[]{"dns"},new String[]{"domain name system"});
synonymMap = builder.build();
}catch (Exception e) {
e.printStackTrace();
}
Tokenizer tokenizer = new StandardTokenizer(reader);
TokenStream filter = new SynonymFilter(tokenizer, synonymMap, true);
return new TokenStreamComponents(tokenizer, filter);
}
private void addTo(SynonymMap.Builder builder, String[] from, String[] to) {
for (String input : from) {
for (String output : to) {
builder.add(new CharsRef(input), new CharsRef(output), false);
}
}
}
}
(顺便说一句,您的
createComponents
,在编写时,将抛出一个NPE。根据您编写的内容判断,我假设这是示例中的一个错误,而不是生产中的代码)它将域名系统作为单个令牌返回。但是我需要它作为单独的标记,反过来使用lucene 4.10.4可以吗?我可以将域名系统转换为dns吗?
addTo(builder,new String[]{"dns"},new String[]{
"domain" + SynonymMap.WORD_SEPARATOR
+ "name" + SynonymMap.WORD_SEPARATOR
+ "system"});