Lucene.NET 中前导通配符引发错误
如果搜索查询包含前导通配符(*
或 ?
),则 QueryParser
的 Parse
函数会抛出异常一个错误。
Dim q As String = "*abc"
Dim qp As New QueryParser("text", New StandardAnalyzer())
Dim query As Query = qp.Parse(q)
Lucene.NET v2.0.0.4 有什么办法解决这个问题吗?
If the search query contains a leading wildcard character (*
or ?
), the QueryParser
's Parse
function throws an error.
Dim q As String = "*abc"
Dim qp As New QueryParser("text", New StandardAnalyzer())
Dim query As Query = qp.Parse(q)
Is there any way to solve this problem in Lucene.NET v2.0.0.4?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
设置 QueryParser.SetAllowLeadingWildcard 方法为真。 API 页面指出“这可能会对大索引产生非常慢的查询”。
Set QueryParser.SetAllowLeadingWildcard Method to true. The API page states that "this can produce very slow queries on big indexes" though.
也许您必须使用 WildcardQuery,但是
Maybe you have to use a WildcardQuery, but
您可以通过使用
NGramFilter
作为索引分析器来避免通配符查询。 您必须使用search_analyzer
而不使用NGramFilter
。 这样您就可以搜索类似于like "%text%"
的内容,甚至不需要通配符。 您只需输入“abc”,您的索引就会很快搜索到包含“abc”的所有条目。You can avoid wildcard queries by utilizing
NGramFilter
for your index analyzer. Than you have to usesearch_analyzer
withoutNGramFilter
. This way you can search similar tolike "%text%"
without even needing wildcards. You just enter 'abc' and your index would be searched for all entries containing 'abc' very quickly.