Fixing search API when searching for all documents

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2011-01-11 17:50:19 -08:00
parent 11d0903d36
commit 3305fd81b6
2 changed files with 54 additions and 19 deletions

View File

@@ -341,5 +341,32 @@ namespace Orchard.Tests.Modules.Indexing {
Assert.That(_searchBuilder.WithField("tag-value", "tag").Count(), Is.EqualTo(1)); Assert.That(_searchBuilder.WithField("tag-value", "tag").Count(), Is.EqualTo(1));
} }
[Test]
public void ShouldReturnAllDocuments() {
_provider.CreateIndex("default");
for(var i = 1; i<100;i++) {
_provider.Store("default", _provider.New(i).Add("term-id", i).Store());
}
Assert.That(_searchBuilder.Count(), Is.EqualTo(99));
}
[Test]
public void NoClauseButAFilter() {
_provider.CreateIndex("default");
for (var i = 1; i < 50; i++) {
_provider.Store("default", _provider.New(i).Add("term-id", i / 10).Store());
}
Assert.That(_searchBuilder.Count(), Is.EqualTo(49));
Assert.That(_searchBuilder.WithField("term-id", 0).ExactMatch().AsFilter().Count(), Is.EqualTo(9));
Assert.That(_searchBuilder.WithField("term-id", 1).ExactMatch().AsFilter().Count(), Is.EqualTo(10));
Assert.That(_searchBuilder.WithField("term-id", 2).ExactMatch().AsFilter().Count(), Is.EqualTo(10));
Assert.That(_searchBuilder.WithField("term-id", 3).ExactMatch().AsFilter().Count(), Is.EqualTo(10));
Assert.That(_searchBuilder.WithField("term-id", 4).ExactMatch().AsFilter().Count(), Is.EqualTo(10));
}
} }
} }

View File

@@ -217,29 +217,37 @@ namespace Lucene.Services {
private Query CreateQuery() { private Query CreateQuery() {
CreatePendingClause(); CreatePendingClause();
var query = new BooleanQuery(); var booleanQuery = new BooleanQuery();
Query resultQuery = booleanQuery;
foreach( var clause in _clauses) if (_clauses.Count == 0) {
query.Add(clause); if (_filters.Count > 0) { // only filters applieds => transform to a boolean query
foreach (var clause in _filters) {
booleanQuery.Add(clause);
}
if ( query.Clauses().Count == 0 ) { // get all documents ? resultQuery = booleanQuery;
query.Add(new TermRangeQuery("id", "0", "9", true, true), BooleanClause.Occur.SHOULD); }
else { // search all documents, without filter or clause
resultQuery = new MatchAllDocsQuery(null);
}
}
else {
foreach (var clause in _clauses)
booleanQuery.Add(clause);
if (_filters.Count > 0) {
var filter = new BooleanQuery();
foreach (var clause in _filters)
filter.Add(clause);
var queryFilter = new QueryWrapperFilter(filter);
resultQuery = new FilteredQuery(booleanQuery, queryFilter);
}
} }
Query finalQuery = query; Logger.Debug("New search query: {0}", resultQuery.ToString());
return resultQuery;
if(_filters.Count > 0) {
var filter = new BooleanQuery();
foreach( var clause in _filters)
filter.Add(clause);
var queryFilter = new QueryWrapperFilter(filter);
finalQuery = new FilteredQuery(query, queryFilter);
}
Logger.Debug("New search query: {0}", finalQuery.ToString());
return finalQuery;
} }
public IEnumerable<ISearchHit> Search() { public IEnumerable<ISearchHit> Search() {