【问题标题】:Error when searching the Content Manager with wildcards使用通配符搜索内容管理器时出错
【发布时间】:2012-11-17 15:51:44
【问题描述】:

我注意到,如果我搜索某些短语 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) 甚至都没有关系。

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

完全相同的搜索在 Tridion 5.3 上运行良好,我想它没有使用 lucene?

关于如何解决这个问题的任何想法?

【问题讨论】:

标签: lucene tridion tridion-2011


【解决方案1】:

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

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

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

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

马上,我认为这两个都不能真正处理像*out* 这样的查询。将您的数据表示为 N-Gram 可能是一种选择(请参阅NGramTokenizer)。

【讨论】:

  • 感谢您的信息。我将确保 Tridion 2011 用户避免使用前导通配符。
  • 明确的答案,我们是否有兴趣提交Area 51 Tridion specific proposal。如果有时间,请使用同一个 SO 帐户注册。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2017-09-16
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多