我有一个 Hibernate 带注释的类TestClass
,其中包含一个List<String>
我用 Lucene 索引的字段。考虑以下示例:
"Foo Bar"
并且"Bar Snafu"
是特定记录的列表中的两个条目。现在,如果用户在 TestClass 上搜索"Foo Snafu"
然后会找到该记录,我猜是因为令牌 Foo 和令牌 Snafu 都是List<String>
该记录中的令牌。
有什么办法可以防止这种情况发生吗?
现实世界的示例是具有原告和被告名单的法院案件。假设有两个人因案件被起诉,Joe Lewis Bob
并且Robert Clay Smith
。这些用户存储在被告名单中的法庭案件记录中。此被告名单使用 Lucene 编制索引。现在,如果用户搜索前面提到的两个被告中的任何一个,就会找到此案。Lewis Smith
但是,如果用户搜索, 或 ,也会找到该案例Joe Clay
。
更新: 在 Lucene IRC 频道中提到我可以使用多值字段。
更新 2:在 Solr IRC 频道中提到我可以使用positionIncrementGap
设置schema.xml
来通过 Solr 完成此操作。显然,如果我使用短语查询(带或不带 slop),那么“增量间隙确保同一字段中的不同值不会导致意外匹配”。