使用通配符搜索Content Manager时出错

Kev*_*don 7 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. 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]
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我正在搜索这个短语*out*.当我搜索短语*a*和各种其他较小的通配符查询时,它也会失败.如果我将搜索限制为只是项目标题,out*工作正常并且*out*工作正常.我是否搜索"所有出版物"或特定文件夹并不重要.如果我将搜索结果限制在最小值(50),则无关紧要.

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

完全相同的搜索在Tridion 5.3上运行正常,我认为它不使用lucene?

有想法该怎么解决这个吗?

fem*_*gon 10

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

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

一种更好的方法可能是过滤需要前导通配符的术语,而不是将它们传递给查询(如果前导通配符是唯一被搜索的术语,则不可行)

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

马上,我不认为其中任何一个真的处理一个查询*out*.将数据表示为N-Grams可能是一种选择(参见NGramTokenizer).