StandardAnalyzer, который использует StandardTokenizer, не маркирует URL-адреса (хотя он распознает электронные письма и обрабатывает их как один токен). То, что вы видите, это поведение по умолчанию - разделение на знаки препинания. Самое простое решение может заключаться в использовании специального анализатора и предоставлении UrlTokenizer, который расширяет / изменяет код в StandardTokenizer, для токенизации URL-адресов. Что-то вроде:
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 разделяется на /, - _ и все, что вы хотите. Nutch может также иметь некоторый соответствующий код, но я не знаю, есть ли версия .NET.
Обратите внимание, что если у вас есть отдельное поле fieldName для URL-адресов, вы можете изменить приведенный выше код, используя StandardTokenizer по умолчанию, иначе используйте UrlTokenizer.
1010 *, например *
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream result = null;
if (fieldName.equals("url")) {
result = new MyUrlTokenizer(reader);
} else {
result = new StandardTokenizer(reader);
}