代码之家  ›  专栏  ›  技术社区  ›  John_

lucene.net中的URL应该使用什么分析器?

  •  4
  • John_  · 技术社区  · 16 年前

    我在获取一个简单的URL来正确标记,以便您可以按预期搜索它时遇到问题。

    我正在索引“ http://news.bbc.co.uk/sport1/hi/football/internationals/8196322.stm “使用StandardAnalyzer,它将字符串标记为以下内容(调试输出):

    (http,0,4,type=<ALPHANUM>)
    (news.bbc.co.uk,7,21,type=<HOST>)
    (sport1/hi,22,31,type=<NUM>)
    (football,32,40,type=<ALPHANUM>)
    (internationals/8196322.stm,41,67,type=<NUM>)
    

    我需要做什么来更正此问题?

    谢谢

    另外,我正在使用Lucene.NET,但我真的不认为这对答案有多大影响。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Joel    16 年前

    public class MyAnalyzer extends Analyzer {
    
    public MyAnalyzer() {
        super();
    }
    
    public TokenStream tokenStream(String fieldName, Reader reader) {
        TokenStream result = new MyUrlTokenizer(reader);
        result = new LowerCaseFilter(result);
        result = new StopFilter(result);
        result = new SynonymFilter(result);
    
        return result;
    }
    

    }

    URLTokenizer在/、-0和其他任何您想要的位置拆分。Nutch可能也有一些相关的代码,但我不知道是否有.NET版本。

    请注意,如果URL具有不同的字段名,则可以修改上述代码,默认情况下使用StandardTokenizer,否则使用UrlTokenizer。

    例如

    public TokenStream tokenStream(String fieldName, Reader reader) {
        TokenStream result = null;
                if (fieldName.equals("url")) {
                      result = new MyUrlTokenizer(reader);
                } else {
                      result = new StandardTokenizer(reader);
                }
    
        2
  •  1
  •   Jonathan Feinberg    16 年前

    推荐文章