使用 Lucene SpellChecker 的条件建议

Conditional Suggestions using Lucene SpellChecker

场景: 我有很多项目。每个项目都有很多模块,每个模块都有自己的描述。

现在我提供模块描述搜索。对于拼错单词的建议,我正在使用 SpellChecker API。我使用 LuceneDictionary 创建了简单的字典。问题是因为索引没有对项目 ID 的任何引用,建议来自所有模块,因为我只想在某个项目中搜索。我该如何为这种情况正确创建索引?

更多信息:我正在使用 Hibernate Search

索引分片

这看起来很适合 Hibernate Search 的分片功能:10.5. Sharding indexes

基本上你可以让每个项目都有它的专用索引。

默认情况下查询将 运行 在所有索引的 "aggregation view" 上,但如果您使用的是较低级别 IndexReader API (just open the IndexReader by full name - including the shard id) or apply a filter on your queries: see enter link description here.

,则可以打开特定索引

多租户

或者,如果您的 "projects" 代表需要彼此完全隔离的不同数据集,您可以查看 Hibernate ORM's native support for multi-tenancy

Hibernate Search works fine with ORM's multi-tenancy feature,但是在这种情况下,人们会希望将多租户与分片结合起来,否则,如果您打开本机 IndexReader,您仍然可以访问所有租户的所有数据。