mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 19:04:51 +08:00
Fixing search API when searching for all documents
--HG-- branch : 1.x
This commit is contained in:
@@ -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));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
resultQuery = booleanQuery;
|
||||||
|
}
|
||||||
|
else { // search all documents, without filter or clause
|
||||||
|
resultQuery = new MatchAllDocsQuery(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
foreach (var clause in _clauses)
|
||||||
|
booleanQuery.Add(clause);
|
||||||
|
|
||||||
if ( query.Clauses().Count == 0 ) { // get all documents ?
|
if (_filters.Count > 0) {
|
||||||
query.Add(new TermRangeQuery("id", "0", "9", true, true), BooleanClause.Occur.SHOULD);
|
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() {
|
||||||
|
Reference in New Issue
Block a user