Индексирование путей к файлам или URI в Lucene

В некоторых документах, которые я храню в Lucene, есть поля, содержащие пути к файлам или URI. Я бы хотел, чтобы пользователи могли получать эти документы, если их условия запроса содержат путь или сегмент URI.

Например, если путь

C:\home\user\research\whitepapers\analysis\detail.txt

Я бы хотел, чтобы пользователь мог найти его, запросив path:whitepapers.

Аналогично, если URI

http://www.stackoverflow.com/questions/ask

Запрос, содержащий uri:questions, вернет его.

Нужно ли мне использовать специальный анализатор для этих полей, или StandardAnaylzer справится с этой задачей? Придется ли мне выполнять предварительную обработку этих полей? (Чтобы заменить, например, косую черту или обратную косую черту пробелами?)

Предложения приветствуются!


person dthrasher    schedule 10.09.2010    source источник


Ответы (1)


Вы можете использовать StandardAnalyzer. Я протестировал это, добавив следующую функцию в Lucene TestStandardAnalyzer.java:

public void testBackslashes() throws Exception {
  assertAnalyzesTo(a, "C:\\home\\user\\research\\whitepapers\\analysis\\detail.txt", new String[]{"c","home", "user", "research","whitepapers", "analysis", "detail.txt"});
  assertAnalyzesTo(a, "http://www.stackoverflow.com/questions/ask", new String[]{"http", "www.stackoverflow.com","questions","ask"});

}

Этот модульный тест прошел с использованием Lucene 2.9.1. Вы можете попробовать это с вашим конкретным дистрибутивом Lucene. Я предполагаю, что он делает то, что вы хотите, сохраняя при этом неразрывные доменные имена и имена файлов. Я уже упоминал, что люблю юнит-тесты?

person Yuval F    schedule 13.09.2010
comment
Спасибо! Использование StandardAnalyzer для индексации сегментов пути также работает в Lucene.Net 2.4.0. - person dthrasher; 15.09.2010
comment
Знаете ли вы о готовом анализаторе Lucene Analyzer, который разделял бы имя домена по точкам или отделял имя файла от его расширения? - person dthrasher; 15.09.2010
comment
Возможно, вы можете использовать LetterTokenizer lucene.apache.org / java / 2_2_0 / api / org / apache / lucene / analysis / с каким-то фильтром. LetterTokenizer разделяет текст на небуквенные. - person Yuval F; 16.09.2010