Emmanuel 在他之前的 搜索文章 中提到了 Hibernate search 3.3(最新版本 3.3.0.Beta1)中的新统计接口。我认为是时候更多地介绍它了。实际上,API 是自我解释的。
package org.hibernate.search.stat; ... public interface Statistics { /** * Reset all statistics. */ void clear(); /** * Get global number of executed search queries * * @return search query execution count */ long getSearchQueryExecutionCount(); /** * Get the total search time in nanoseconds. */ long getSearchQueryTotalTime(); /** * Get the time in nanoseconds of the slowest search. */ long getSearchQueryExecutionMaxTime(); /** * Get the average search time in nanoseconds. */ long getSearchQueryExecutionAvgTime(); /** * Get the query string for the slowest query. */ String getSearchQueryExecutionMaxTimeQueryString(); /** * Get the total object loading in nanoseconds. */ long getObjectLoadingTotalTime(); /** * Get the time in nanoseconds for the slowest object load. */ long getObjectLoadingExecutionMaxTime(); /** * Get the average object loading time in nanoseconds. */ long getObjectLoadingExecutionAvgTime(); /** * Gets the total number of objects loaded */ long getObjectsLoadedCount(); /** * Are statistics logged */ public boolean isStatisticsEnabled(); /** * Enable statistics logs (this is a dynamic parameter) */ public void setStatisticsEnabled(boolean b); /** * Returns the Hibernate Search version. * * @return the Hibernate Search version */ String getSearchVersion(); /** * Returns a list of all indexed classes. * * @return list of all indexed classes */ Set<String> getIndexedClassNames(); /** * Returns the number of documents for the given entity. * * @param entity the fqc of the entity * * @return number of documents for the specified entity name * * @throws IllegalArgumentException in case the entity name is not valid */ int getNumberOfIndexedEntities(String entity); /** * Returns a map of all indexed entities and their document count in the index. * * @return a map of all indexed entities and their document count. The map key is the fqc of the entity and * the map value is the document count. */ Map<String, Integer> indexedEntitiesCount(); }
通过 SearchFactory.getStatistics() 访问统计信息。有关哪些类被索引以及索引中实体数量的信息始终可用。然而,只有当您的配置中设置了属性 hibernate.search.generate_statistics 时,才会收集查询和对象加载时间。我正在考虑引入一个额外的接口,以便更明显地分离这一点。你怎么看?
新的统计和监控功能并不止于此。您还可以通过 JMX 启用对统计信息的访问。设置属性 hibernate.search.jmx_enabled 将自动将 StatisticsInfoMBean 注册到 MBeanServer。在此 MBean 之上还有另外两个 MBean - IndexControlMBean 和 IndexingProgressMonitorMBean,它们是否可用取决于您的配置和应用程序的状态。
《IndexControlMBean》允许您为特定实体构建、优化和清理索引。索引通过批量索引API进行。此bean需要在JMX中注册的要求是,Hibernate SessionFactory通过`hibernate.session_factory_name`属性绑定到JNDI。有关如何配置JNDI的更多信息,请参阅Hibernate Core手册。《IndexControlMBean》API目前仅处于实验阶段。
最后但同样重要的是,《IndexingProgressMonitorMBean》。该MBean是《MassIndexerProgressMonitor》接口的实现。如果设置了`hibernate.search.jmx_enabled`并且使用了批量索引API,可以通过此MBean跟踪索引进度。在索引过程中,bean将绑定到JMX。一旦索引完成,MBean就不再可用。同样,此API目前仅处于实验阶段。
您认为这个新的监控和统计API有价值吗?您是否缺少任何功能?请告诉我们,并使用搜索论坛或Jira建议新功能或报告错误。
祝您愉快!