Lucene 使用通配符搜索内容管理器时出错

Lucene 使用通配符搜索内容管理器时出错,lucene,tridion,tridion-2011,Lucene,Tridion,Tridion 2011,我注意到,如果我搜索某些短语,Tridion Content Manager会给我以下错误 Unable to get the list of search results. Unable to process the Search Request. Invalid search query: (*out*) AND RepositoryId:tcm\:0\-4\-1 AND OrganizationalItemAncestorIds:tcm\:*\-135625\-2. maxClauseCo

我注意到,如果我搜索某些短语,Tridion Content Manager会给我以下错误

Unable to get the list of search results.
Unable to process the Search Request. Invalid search query: (*out*) AND RepositoryId:tcm\:0\-4\-1 AND OrganizationalItemAncestorIds:tcm\:*\-135625\-2. maxClauseCount is set to 10240
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set to 10240
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:136)
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:127)
at org.apache.lucene.search.ScoringRewrite$1.addClause
[...and so on]
在上面的示例中,我正在搜索短语
*out*
。当我搜索短语
*a*
和其他各种较小的通配符查询时,它也会失败
out*
可以正常工作,
*out*
如果我将搜索限制为仅搜索项目标题,则可以正常工作。无论我是使用“所有出版物”还是特定文件夹进行搜索,这都无关紧要。即使我将搜索结果限制在最小值(50)也没有关系

也许这与返回的结果数量有关

完全相同的搜索在Tridion5.3上运行良好,我想它没有使用lucene


Lucene不允许使用前导通配符(Tridion的R5.3版本使用了允许使用前导通配符的Verity实现),因为它是索引和搜索的方式。前导通配符有效地导致索引扫描每个术语以查找匹配项,而不是使用更典型和更高性能的方法使用索引查找匹配项(请参阅)

您可以通过调用
QueryParser.setAllowReadingWildcard(true)
来启用此功能,但我强烈建议在大多数情况下不要这样做

更好的方法可能是筛选需要前导通配符的术语,而不是将它们传递到查询中(如果前导通配符术语是搜索的唯一术语,则实际上不可行)

此外,Lucene还提供了一个过滤器,它可以反向索引所有术语。这可能是创建索引以启用前导通配符搜索的最佳方法


不过,我认为这两种方法都不能处理像
*out*
这样的查询。将数据表示为N-gram可能是一种选择(请参阅)。

谢谢您提供的信息。我只想确保Tridion2011用户避免使用前导通配符。答案很清楚,我们是否有兴趣让您承诺使用该通配符。如果您有时间,请使用相同的SO帐户注册。问得好,我们是否能让您有兴趣承诺使用该帐户。如果您有时间,请使用相同的SO帐户注册。