我使用solr搜索文档,当尝试使用此查询" id:*
" 搜索文档时,我得到此查询解析器异常,告诉它无法用*或?解析查询.作为第一个角色.
HTTP Status 400 - org.apache.lucene.queryParser.ParseException: Cannot parse 'id:*': '*' or '?' not allowed as first character in WildcardQuery type Status report message org.apache.lucene.queryParser.ParseException: Cannot parse 'id:*': '*' or '?' not allowed as first character in WildcardQuery description The request sent by the client was syntactically incorrect (org.apache.lucene.queryParser.ParseException: Cannot parse 'id:*': '*' or '?' not allowed as first character in WildcardQuery).
是否有任何补丁可以让它与**一起使用?或者进行这样的查询是否成本很高?
如果您想要所有文档,请在*:*上进行查询
如果你想要所有带有特定字段的文件(例如id),请尝试id:[*TO*]
默认情况下,Lucene不允许您使用星号启动WildcardQueries,因为这些查询非常非常昂贵,并且在大型索引上非常非常非常慢.
如果您正在使用Lucene QueryParser,请在其上调用setAllowLeadingWildcard(true)以启用它.
如果您希望所有文档都设置了某个字段,那么以编程方式查询或遍历索引比使用QueryParser要好得多.您应该只使用QueryParser来解析用户输入.
id:[a* TO z*] id:[0* TO 9*] etc.
我只是在我的索引上的lukeall中做了这个并且它工作,因此它应该在使用标准查询解析器的Solr中工作.我实际上并不使用Solr.
在基础Lucene中,有一个很好的理由说明为什么你永远不会查询每个文档,这是因为查询文档时必须使用a new indexReader("DirectoryName")
并对其应用查询.因此,您可以完全跳过对其应用查询并使用这些indexReader
方法numDocs()
来获取所有文档的计数,并document(int n)
检索任何文档.