public Query GetLuceneQuery()
{
string query = indexQuery.Query;
Query luceneQuery;
if (String.IsNullOrEmpty(query))
{
logQuerying.Debug("Issuing query on index {0} for all documents", parent.name);
luceneQuery = new MatchAllDocsQuery();
}
else
{
logQuerying.Debug("Issuing query on index {0} for: {1}", parent.name, query);
var toDispose = new List<Action>();
PerFieldAnalyzerWrapper searchAnalyzer = null;
try
{
searchAnalyzer = parent.CreateAnalyzer(new LowerCaseKeywordAnalyzer(), toDispose);
searchAnalyzer = parent.AnalyzerGenerators.Aggregate(searchAnalyzer, (currentAnalyzer, generator) =>
{
Analyzer newAnalyzer = generator.GenerateAnalzyerForQuerying(parent.name, indexQuery.Query, currentAnalyzer);
if (newAnalyzer != currentAnalyzer)
{
DisposeAnalyzerAndFriends(toDispose, currentAnalyzer);
}
return parent.CreateAnalyzer(newAnalyzer, toDispose);
});
luceneQuery = QueryBuilder.BuildQuery(query, searchAnalyzer);
}
finally
{
DisposeAnalyzerAndFriends(toDispose, searchAnalyzer);
}
}
return luceneQuery;
}