当前位置:  开发笔记 > 运维 > 正文

Solr中的WildcardQuery错误

如何解决《Solr中的WildcardQuery错误》经验,为你挑选了3个好方法。

我使用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).

是否有任何补丁可以让它与**一起使用?或者进行这样的查询是否成本很高?



1> Daniel Papas..:

如果您想要所有文档,请在*:*上进行查询

如果你想要所有带有特定字段的文件(例如id),请尝试id:[*TO*]



2> Joe Shaw..:

默认情况下,Lucene不允许您使用星号启动WildcardQueries,因为这些查询非常非常昂贵,并且在大型索引上非常非常非常慢.

如果您正在使用Lucene QueryParser,请在其上调用setAllowLeadingWildcard(true)以启用它.

如果您希望所有文档都设置了某个字段,那么以编程方式查询或遍历索引比使用QueryParser要好得多.您应该只使用QueryParser来解析用户输入.



3> dlamblin..:
id:[a* TO z*] id:[0* TO 9*] etc.

我只是在我的索引上的lukeall中做了这个并且它工作,因此它应该在使用标准查询解析器的Solr中工作.我实际上并不使用Solr.

在基础Lucene中,有一个很好的理由说明为什么你永远不会查询每个文档,这是因为查询文档时必须使用a new indexReader("DirectoryName")并对其应用查询.因此,您可以完全跳过对其应用查询并使用这些indexReader方法numDocs()来获取所有文档的计数,并document(int n)检索任何文档.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有