如果搜索查询包含前导通配符(*
或?
),则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 中解决这个问题?
如果搜索查询包含前导通配符(*
或?
),则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 中解决这个问题?
将QueryParser.SetAllowLeadingWildcard 方法设置为 true。API 页面指出“这会在大索引上产生非常慢的查询”。
也许您必须使用WildcardQuery,但是
...为了防止通配符查询速度极慢,通配符术语不应以通配符之一开头...
NGramFilter
您可以通过使用索引分析器来避免通配符查询。比你必须使用search_analyzer
没有NGramFilter
. 这样,您like "%text%"
甚至不需要通配符就可以进行类似的搜索。您只需输入“abc”,您的索引将很快搜索所有包含“abc”的条目。