本页面说明 Fess 的架构、代码结构、 主要组件。 通过理解 Fess 的内部结构,可以高效地进行开发。
整体架构
Fess 由以下主要组件构成:
层的说明
用户界面层
用户直接操作的界面。 使用 JSP 和 HTML、JavaScript 实现。
搜索界面: 面向最终用户的搜索界面
管理界面: 面向系统管理员的设置・管理界面
Web 应用层
使用 LastaFlute 框架的 Web 应用层。
Action: 处理 HTTP 请求并调用业务逻辑
Form: 接收请求参数和验证
Service: 实现业务逻辑
业务逻辑层
实现 Fess 主要功能的层。
Crawler: 从网站和文件系统收集数据
Job: 定时执行的任务
Helper: 应用程序中使用的辅助类
数据访问层
使用 DBFlute 访问 OpenSearch 的层。
Behavior: 数据操作的接口
Entity: 数据实体
Query: 构建搜索查询
数据存储层
使用 OpenSearch 3.5.0 作为搜索引擎。
项目结构
目录结构
主要包的详情
app 包
Web 应用层的代码。
app.web 包
实现搜索界面和面向最终用户的功能。
主要类:
SearchAction.java: 搜索处理LoginAction.java: 登录处理
例:
app.web.admin 包
实现管理界面的功能。
主要类:
AdminWebconfigAction.java: Web 爬取配置AdminSchedulerAction.java: 调度程序管理AdminUserAction.java: 用户管理
命名规则:
Admin前缀: Admin 用 ActionAction后缀: Action 类Form后缀: Form 类
app.service 包
实现业务逻辑的服务层。
主要类:
SearchLogService.java: 搜索服务UserService.java: 用户管理服务ScheduledJobService.java: 作业管理服务
例:
crawler 包
实现数据收集功能。
crawler 包 (fess-crawler 库)
主要类:
CrawlerClient.java: 爬虫客户端接口HcHttpClient.java: HTTP 客户端FileSystemClient.java: 文件系统客户端ExtractorFactory.java: 提取器工厂TikaExtractor.java: 使用 Apache Tika 提取Transformer.java: 转换接口
crawler 包 (fess main)
主要类:
FessStandardTransformer.java: Fess 标准转换器FessXpathTransformer.java: Fess XPath 转换器
opensearch 包
实现与 OpenSearch 的集成。
opensearch.client 包
OpenSearch 客户端的实现。
主要类:
SearchEngineClient.java: OpenSearch 客户端
opensearch.query 包
实现搜索查询的构建。
主要类:
QueryCommand.java: 查询命令QueryProcessor.java: 查询处理
helper 包
应用程序中使用的辅助类。
主要类:
SystemHelper.java: 系统整体的辅助类CrawlingConfigHelper.java: 爬取配置的辅助类SearchLogHelper.java: 搜索日志的辅助类UserInfoHelper.java: 用户信息的辅助类ViewHelper.java: 视图相关的辅助类QueryHelper.java: 查询构建的辅助类
例:
job 包
实现定时执行的作业。
主要类:
CrawlJob.java: 爬取作业SuggestJob.java: 建议作业ScriptExecutorJob.java: 脚本执行作业
例:
entity 包
对应 OpenSearch 文档的实体类。 此包由 DBFlute 自动生成。
主要类:
SearchLog.java: 搜索日志ClickLog.java: 点击日志FavoriteLog.java: 收藏日志User.java: 用户信息Role.java: 角色信息
Note
entity 包的代码是自动生成的, 不要直接编辑。 通过更改模式并重新生成来更新。
mylasta 包
进行 LastaFlute 的配置和自定义。
mylasta.action 包
定义 Action 的基类。
FessUserBean.java: 用户信息FessHtmlPath.java: HTML 路径定义
mylasta.direction 包
进行应用程序整体的配置。
FessConfig.java: 配置的读取FessFwAssistantDirector.java: 框架配置
设计模式和实现模式
Fess 使用以下设计模式。
MVC 模式
使用 LastaFlute 实现 MVC 模式。
Model: Service、Entity
View: JSP
Controller: Action
例:
DI 模式
使用 LastaFlute 的 DI 容器。
Factory 模式
用于生成各种组件。
Strategy 模式
用于爬虫和转换器。
配置管理
Fess 的配置在多个文件中管理。
fess_config.properties
定义应用程序的主要配置。
fess_config.xml
LastaDi component configuration file.
fess_message_*.properties
多语言支持的消息文件。
fess_message_ja.properties: 日语fess_message_en.properties: 英语
数据流
搜索流程
爬取流程
扩展点
Fess 可以在以下点进行扩展。
添加自定义爬虫
实现 CrawlerClient 接口,可以支持独特的数据源。
添加自定义转换器
实现 Transformer,可以添加独特的数据转换处理。
添加自定义提取器
实现 Extractor,可以添加独特的内容提取处理。
添加自定义插件
通过管理 UI 的插件管理功能来管理插件。
参考资料
框架
技术文档
下一步
理解了架构后,请参阅以下文档: