你好我有lucene的应用程序,当我搜索的词语如“a”,“a *”,“an”,“an *”,...
抛出错误:
Ausnahmedetails:Lucene.Net.Search.BooleanQuery + TooManyClauses:Systemfehler
Quellfehler:
Zeile 130:
Zeile 131: Dim searcher As IndexSearcher = New IndexSearcher(rootpath + "\" + index_root) 'Suche auf diesem Verzeichnis
Zeile 132: Dim hits As Hits = searcher.Search(query)
Zeile 133:
Zeile 134:
但包含三个或更多字母的术语不会引发错误。
我真的很困惑。
更多代码:
Public Sub lucene_search(ByVal strSuchbegriff As String)
Dim parser As QueryParser
Dim query As Query
If (check_volltextsuche.Checked = True And check_dateinamensuche.Checked = False) Then
parser = New QueryParser("bodytext", analyzer) 'bodytext=typfeld der durchsucht wird
Try
query = parser.Parse(strSuchbegriff)
Catch
meldung.Text = "Falsche Verwendung der Suchsyntax"
query = parser.Parse("Suchsyntax")
ItemsGrid.Visible = False
myexception = True
End Try
ElseIf (check_volltextsuche.Checked = False And check_dateinamensuche.Checked = True) Then
parser = New QueryParser("title", analyzer)
Try
query = parser.Parse(strSuchbegriff) '* um teile danach zu finden --> gesamten filename durchsuchen
Catch
meldung.Text = "Falsche Verwendung der Suchsyntax"
query = parser.Parse("Suchsyntax")
ItemsGrid.Visible = False
myexception = True
End Try
Else
parser = New MultiFieldQueryParser(New [String]() {"title", "bodytext"}, New StandardAnalyzer())
Try
query = parser.Parse(strSuchbegriff)
Catch
meldung.Text = "Falsche Verwendung der Suchsyntax"
query = parser.Parse("Suchsyntax")
ItemsGrid.Visible = False
myexception = True
End Try
End If
'################
'Do the search ##
'################
If myexception = False Then
Dim searcher As IndexSearcher = New IndexSearcher(rootpath + "\" + index_root) 'Suche auf diesem Verzeichnis
Dim hits As Hits = searcher.Search(query) '<-- ERROR
提前感谢:&gt;
答案 0 :(得分:0)
你确定它也只是“a”失败了吗?
对于“a *”和“an *”的情况,这个失败的原因是因为Lucene在前缀搜索中转换该表达式并基本上将其变成一个巨大的“OR”查询索引中定义的术语以“a”(或“an”)开头。因此,如果你有“aardvark”,“鹿茸”,“动物”等,那么“a *”与“aardvark OR antler OR animal OR ...”相同。
Luncene对“OR”查询中可以合并的术语数量有限制,默认情况下它很小(因为太多术语会严重影响性能),如果术语太多,它会抛出您找到BooleanQuery+TooManyClauses
例外。
您可能会发现像“x *”或“qr *”这样的查询不会引发异常:这是因为您(可能)没有很多以“x”或“qr”开头的术语
要解决此问题,您可以选择以下几种方法: