Hibernate Search 中文操作指南
22. Troubleshooting
22.1. Finding out what is executed under the hood
对于搜索查询,可以通过调用 toString() 或 queryString() 来获取 SearchQuery object 的人类可读表示形式。此外,可使用日志: org.hibernate.search.query 会在 TRACE 级别记录每个查询,然后执行该查询。
有关被执行内容的更一般信息,请依赖于记录器:
-
org.hibernate.search.backend.lucene.infostream for Lucene.
-
org.hibernate.search.elasticsearch.request for Elasticsearch.
22.2. Loggers
在调试使用 Hibernate Search 的应用时,以下是几个可能派的上用场的记录器:
org.hibernate.search.query
适用于所有后端。
在执行之前,以 TRACE 级别记录每个搜索查询。
org.hibernate.search.elasticsearch.request
仅适用于 Elasticsearch 后端。
在执行后,以 DEBUG 或 TRACE 级别记录请求发送到 Elasticsearch 的情况。所有可用的请求和响应信息都被记录:方法、路径、执行时间、状态代码,以及完整的请求和响应。
使用 DEBUG 级别仅记录非成功请求(状态代码与 2xx 不同),或使用 TRACE 级别记录每个请求。
您可以使用 configuration property为请求和响应启用漂亮打印(换行和缩进)。
org.hibernate.search.backend.lucene.infostream
仅适用于 Lucene 后端。
在 TRACE 级别记录卢森内部组件的低级跟踪信息。
仅启用此记录器的_TRACE_级别不够:您还必须使用 configuration property启用信息流。
22.3. Frequently asked questions
22.3.1. Unexpected or missing documents in search hits
当某些文档意外匹配或不匹配查询时,你需要有关正在执行的确切查询以及索引内容的信息。
要确切了解正在执行的查询是什么,请参见 Finding out what is executed under the hood。
要检查索引内容:
-
对于 Elasticsearch 后端,可以使用 Hibernate Search 或直接使用 REST API 运行更简单的查询。
-
对于 Lucene 后端,可以使用 Hibernate Search 或 use the Luke tool( Lucene binary packages的一部分)运行更简单的查询。
22.3.2. Unsatisfying order of search hits when sorting by score
当按分数排序时,如果文档按预期的顺序出现,这意味着某些文档的分数比你想要的更高或更低。
了解这些分数的最佳方法只是让后端解释分数是如何计算的。返回的解释将包括对特定文档的分数如何计算的人类可读描述。
无论使用哪种 API,解释在性能方面相当昂贵:仅将其用于调试目的。
有两种方法可检索说明:
-
如果您对特定实体感兴趣并且知道其标识符:对查询使用 explain(…) 方法。请参阅 explain(…): Explaining scores 。
-
如果您只需要了解所有热门结果的解释:请使用 _explanation_投影。请参阅 here for Lucene和 here for Elasticsearch。
22.3.3. Search query execution takes too long
当搜索查询执行时间过长时,你可能需要更多有关具体执行时间和具体执行内容的信息。
要了解查询执行花费了多长时间,对搜索结果使用 took() method 。
要确切了解正在执行的查询是什么,请参见 Finding out what is executed under the hood。