Постобработка ответов Solr в шаблонах Velocity путем вызова внешних методов Java
Быстрый контекст приложения в первую очередь.
В настоящее время я использую Solr в автономном режиме для индексирования тысяч текстовых документов. (не совсем текстовые документы).
Один документ имеет следующую структуру:
- id - уникальный идентификатор файла
- line_text - текстовые данные
- file_local_url - путь к каталогу файла
- line_no - номер строки line_text
Чего я пытаюсь достичь?
После поиска в поле line_text в результате я должен увидеть соответствующие фрагменты текста. Фрагментом текста могут быть строки от (line_no - 3) до (line_no + 3). В настоящее время для поиска я использую встроенный в Solr модуль записи ответов Velocity и шаблоны.
Как я думаю об этом?
Я использую шаблоны Velocity по умолчанию, которые поставляются с Solr. В файле шаблона hit.vm ниже описывается способ получения, обработки и отображения ответов:
#foreach( $fieldName in $doc.fieldNames )
<tr>
<th align="right" valign="top" style="field-name">
$esc.html($fieldName):
</th>
<td align="left" valign="top">
#field($fieldName)
</td>
</tr>
#end
Теперь, чтобы получить текст фрагмента, я хотел бы определить внешнюю функцию где-нибудь в классе Java, что-то вроде этого:
public String getSnippet(file_local_url, line_no)
который вернет фрагмент в формате строки.
Теперь я хочу использовать этот ответ в шаблоне скорости. Там я думаю о чем-то вроде этого:
## get the snippet string by calling the external ava function
#set($snippet = $someClass.getSnippet(#field("file_local_url"), #field("line_no)))
## print the snippet
snippet
(Я не уверен, что это правильный синтаксис.)
Вопросы:
- Какой тип файла должен содержать someClass.getSnippet()? Файл Java? Файл класса? Банка?
- Где мне хранить этот файл? Как скорость узнает, где найти этот класс?
- Использую ли я синтаксис write для вызова метода и использования его результатов в приведенном выше шаблоне Velocity?
Некоторые существующие вопросы по SO, такие как эта, и это дали мне некоторое представление об этом. Но я пока не вижу более широкой картины (особенно вопрос 2 выше).
Пожалуйста, укажите направление.