diff --git a/src/Orchard.Core.Tests/Indexing/DefaultSearchBuilderTests.cs b/src/Orchard.Core.Tests/Indexing/DefaultSearchBuilderTests.cs index b4f2d5c37..a9b56e16f 100644 --- a/src/Orchard.Core.Tests/Indexing/DefaultSearchBuilderTests.cs +++ b/src/Orchard.Core.Tests/Indexing/DefaultSearchBuilderTests.cs @@ -3,17 +3,13 @@ using System.IO; using System.Linq; using Autofac; using NUnit.Framework; -using Orchard.Environment; using Orchard.Environment.Configuration; using Orchard.FileSystems.AppData; -using Orchard.FileSystems.VirtualPath; using Orchard.Indexing; using Orchard.Core.Indexing.Lucene; -using Orchard.Services; -using Orchard.Tests.Environment.Configuration; using Orchard.Tests.FileSystems.AppData; -namespace Orchard.Tests.Indexing { +namespace Orchard.Core.Tests.Indexing { public class DefaultSearchBuilderTests { private IContainer _container; private IIndexProvider _provider; @@ -194,5 +190,57 @@ namespace Orchard.Tests.Indexing { Assert.That(cpp.Count(), Is.EqualTo(2)); } + + [Test] + public void ShouldHandleMandatoryFields() { + _provider.CreateIndex("default"); + _provider.Store("default", _provider.New(1).Add("body", "Orchard has been developped in C#")); + _provider.Store("default", _provider.New(2).Add("body", "Windows has been developped in C++")); + + Assert.That(_searchBuilder.WithField("body", "develop").Search().ToList().Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Search().ToList().Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Mandatory().Search().ToList().Count(), Is.EqualTo(1)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Mandatory().Search().First().Id, Is.EqualTo(1)); + } + + [Test] + public void ShouldHandleForbiddenFields() { + _provider.CreateIndex("default"); + _provider.Store("default", _provider.New(1).Add("body", "Orchard has been developped in C#")); + _provider.Store("default", _provider.New(2).Add("body", "Windows has been developped in C++")); + + Assert.That(_searchBuilder.WithField("body", "develop").Search().ToList().Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Search().ToList().Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Forbidden().Search().ToList().Count(), Is.EqualTo(1)); + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Forbidden().Search().First().Id, Is.EqualTo(2)); + } + + [Test] + public void ShouldHandleWeight() { + _provider.CreateIndex("default"); + _provider.Store("default", _provider.New(1).Add("body", "Orchard has been developped in C#")); + _provider.Store("default", _provider.New(2).Add("body", "Windows has been developped in C++")); + + Assert.That(_searchBuilder.WithField("body", "develop").WithField("body", "Orchard").Weighted(2).Search().First().Id, Is.EqualTo(1)); + } + + [Test] + public void ShouldParseLuceneQueries() { + _provider.CreateIndex("default"); + _provider.Store("default", _provider.New(1).Add("body", "Bradley is in the kitchen.").Add("title", "Beer and takos")); + _provider.Store("default", _provider.New(2).Add("body", "Renaud is also in the kitchen.").Add("title", "A love affair")); + _provider.Store("default", _provider.New(3).Add("body", "Bertrand is a little bit jealous.").Add("title", "Soap opera")); + + Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen").Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen bertrand").Count(), Is.EqualTo(3)); + Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen +bertrand").Count(), Is.EqualTo(1)); + Assert.That(_searchBuilder.Parse(new[] { "body" }, "+kitchen +bertrand").Count(), Is.EqualTo(0)); + Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit").Count(), Is.EqualTo(0)); + Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit*").Count(), Is.EqualTo(2)); + Assert.That(_searchBuilder.Parse(new[] { "body", "title" }, "bradley love^3 soap").Count(), Is.EqualTo(3)); + Assert.That(_searchBuilder.Parse(new[] { "body", "title" }, "bradley love^3 soap").Search().First().Id, Is.EqualTo(2)); + } + + } } diff --git a/src/Orchard.Web/Core/Common/Module.txt b/src/Orchard.Web/Core/Common/Module.txt index 9485eb1f9..0341de14c 100644 --- a/src/Orchard.Web/Core/Common/Module.txt +++ b/src/Orchard.Web/Core/Common/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The common module introduces content parts that are going to be used by most content types (common, body and routable). features: Common: Description: Core content parts. diff --git a/src/Orchard.Web/Core/Contents/Module.txt b/src/Orchard.Web/Core/Contents/Module.txt index 37a0813df..f8cdabfbd 100644 --- a/src/Orchard.Web/Core/Contents/Module.txt +++ b/src/Orchard.Web/Core/Contents/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The contents module enables the creation of custom content types. features: Contents: Description: Default custom content type definition, creation and management. diff --git a/src/Orchard.Web/Core/Dashboard/Module.txt b/src/Orchard.Web/Core/Dashboard/Module.txt index 7a04131e6..d5ca03156 100644 --- a/src/Orchard.Web/Core/Dashboard/Module.txt +++ b/src/Orchard.Web/Core/Dashboard/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The dashboard module is providing the dashboard screen of the admininstration UI of the application. features: Dashboard: Description: Standard admin dashboard. diff --git a/src/Orchard.Web/Core/Feeds/Module.txt b/src/Orchard.Web/Core/Feeds/Module.txt index 4f665d079..9dd038446 100644 --- a/src/Orchard.Web/Core/Feeds/Module.txt +++ b/src/Orchard.Web/Core/Feeds/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The Feeds module is providing RSS feeds to content items. features: Feeds: Description: RSS feeds for content items. diff --git a/src/Orchard.Web/Core/HomePage/Module.txt b/src/Orchard.Web/Core/HomePage/Module.txt index 7a6752958..49458feb5 100644 --- a/src/Orchard.Web/Core/HomePage/Module.txt +++ b/src/Orchard.Web/Core/HomePage/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The HomePage module enables the promotion of a content item or container to be the home page of the site. features: HomePage: Description: Standard site home page that allows a specified content type or container to *be* the home page. diff --git a/src/Orchard.Web/Core/Indexing/Lucene/DefaultSearchBuilder.cs b/src/Orchard.Web/Core/Indexing/Lucene/DefaultSearchBuilder.cs index a68965594..a9878c268 100644 --- a/src/Orchard.Web/Core/Indexing/Lucene/DefaultSearchBuilder.cs +++ b/src/Orchard.Web/Core/Indexing/Lucene/DefaultSearchBuilder.cs @@ -19,7 +19,7 @@ namespace Orchard.Core.Indexing.Lucene { private readonly Directory _directory; - private readonly Dictionary _fields; + private readonly Dictionary _fields; private int _count; private int _skip; private readonly Dictionary _before; @@ -28,7 +28,15 @@ namespace Orchard.Core.Indexing.Lucene { private bool _sortDescending; private string _parse; private readonly Analyzer _analyzer; - private string _defaultField; + private string[] _defaultFields; + + // pending clause attributes + private string _field; + private string _terms; + private BooleanClause.Occur _occur; + private bool _prefix; + private bool _stem; + private float _boost; public ILogger Logger { get; set; } @@ -40,15 +48,17 @@ namespace Orchard.Core.Indexing.Lucene { _skip = 0; _before = new Dictionary(); _after = new Dictionary(); - _fields = new Dictionary(); + _fields = new Dictionary(); _sort = String.Empty; _sortDescending = true; _parse = String.Empty; _analyzer = DefaultIndexProvider.CreateAnalyzer(); + + InitPendingClause(); } - public ISearchBuilder Parse(string defaultField, string query) { - if ( String.IsNullOrWhiteSpace(defaultField) ) { + public ISearchBuilder Parse(string[] defaultFields, string query) { + if ( defaultFields.Length == 0 ) { throw new ArgumentException("Default field can't be empty"); } @@ -56,32 +66,84 @@ namespace Orchard.Core.Indexing.Lucene { throw new ArgumentException("Query can't be empty"); } - _defaultField = defaultField; + _defaultFields = defaultFields; _parse = query; return this; } public ISearchBuilder WithField(string field, string value) { - return WithField(field, value, true); + CreatePendingClause(); + + _field = field; + _terms = value; + + return this; } - public ISearchBuilder WithField(string field, string value, bool wildcardSearch) { + public ISearchBuilder Mandatory() { + _occur = BooleanClause.Occur.MUST; + return this; + } + + public ISearchBuilder Forbidden() { + _occur = BooleanClause.Occur.MUST_NOT; + return this; + } + + public ISearchBuilder ExactMatch() { + _prefix = false; + _stem = false; + return this; + } + + public ISearchBuilder Weighted(float weight) { + _boost = weight; + return this; + } + + private void InitPendingClause() { + _field = String.Empty; + _terms = String.Empty; + _occur = BooleanClause.Occur.SHOULD; + _prefix = true; + _stem = true; + _boost = 0; + } + + private void CreatePendingClause() { + if(String.IsNullOrWhiteSpace(_field) || String.IsNullOrWhiteSpace(_terms)) { + return; + } var tokens = new List(); - using(var sr = new System.IO.StringReader(value)) { - var stream = _analyzer.TokenStream(field, sr); - while(stream.IncrementToken()) { - tokens.Add(((TermAttribute)stream.GetAttribute(typeof(TermAttribute))).Term()); + using ( var sr = new System.IO.StringReader(_terms) ) { + var stream = _analyzer.TokenStream(_field, sr); + + if(_stem) { + stream = new PorterStemFilter(stream); + } + + while ( stream.IncrementToken() ) { + tokens.Add(( (TermAttribute)stream.GetAttribute(typeof(TermAttribute)) ).Term()); } } - _fields[field] = tokens - .Where(k => !String.IsNullOrWhiteSpace(k)) - .Select(QueryParser.Escape) - .Select(k => wildcardSearch ? (Query)new PrefixQuery(new Term(field, k)) : new TermQuery(new Term(k))) - .ToArray(); - - return this; + var clauses = tokens + .Where(k => !String.IsNullOrWhiteSpace(k)) // remove empty strings + .Select(QueryParser.Escape) // escape special chars (e.g. C#) + .Select(k => new Term(_field, k)) // creates the Term instance + .Select(t => _prefix ? new PrefixQuery(t) as Query : new TermQuery(t) as Query) // apply the corresponding Query + .Select(q => { + if (_boost != 0) q.SetBoost(_boost); + return q; + }) + .Select(q => new BooleanClause(q, _occur)); // apply the corresponding clause + + if ( !_fields.ContainsKey(_field) ) { + _fields[_field] = new BooleanClause[0]; + } + + _fields[_field] = _fields[_field].Union(clauses).ToArray(); } public ISearchBuilder After(string name, DateTime date) { @@ -120,16 +182,23 @@ namespace Orchard.Core.Indexing.Lucene { } private Query CreateQuery() { - if(!String.IsNullOrWhiteSpace(_parse)) { - return new QueryParser(DefaultIndexProvider.LuceneVersion, _defaultField, DefaultIndexProvider.CreateAnalyzer()).Parse(_parse); - } + CreatePendingClause(); var query = new BooleanQuery(); + if(!String.IsNullOrWhiteSpace(_parse)) { + + foreach ( var defaultField in _defaultFields ) { + var clause = new BooleanClause(new QueryParser(DefaultIndexProvider.LuceneVersion, defaultField, DefaultIndexProvider.CreateAnalyzer()).Parse(_parse), BooleanClause.Occur.SHOULD); + query.Add(clause); + } + } + + if ( _fields.Keys.Count > 0 ) { // apply specific filters if defined - foreach ( var filters in _fields.Values ) { - foreach(var filter in filters) - query.Add(filter, BooleanClause.Occur.SHOULD); + foreach ( var clauses in _fields.Values ) { + foreach( var clause in clauses) + query.Add(clause); } } diff --git a/src/Orchard.Web/Core/Indexing/Module.txt b/src/Orchard.Web/Core/Indexing/Module.txt index 18b0612fa..e18a54668 100644 --- a/src/Orchard.Web/Core/Indexing/Module.txt +++ b/src/Orchard.Web/Core/Indexing/Module.txt @@ -4,6 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 +description: The Indexing module enables the site to be indexed. The index generated by this module can then be used by the search module to provide an integrated full-text search experience to a web site. features: Indexing: Description: Indexing services based on Lucene. diff --git a/src/Orchard.Web/Core/Localization/Module.txt b/src/Orchard.Web/Core/Localization/Module.txt index 6cb082dda..04552cec2 100644 --- a/src/Orchard.Web/Core/Localization/Module.txt +++ b/src/Orchard.Web/Core/Localization/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Support for localizing content items for cultures. +description: The localization module enables the localization of content items. features: Localization: Description: Localize content items. diff --git a/src/Orchard.Web/Core/Navigation/Module.txt b/src/Orchard.Web/Core/Navigation/Module.txt index d89e2186b..538256a9f 100644 --- a/src/Orchard.Web/Core/Navigation/Module.txt +++ b/src/Orchard.Web/Core/Navigation/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The navigation module creates and manages a simple navigation menu for the front-end of the application. features: Navigation: Description: Menu management. diff --git a/src/Orchard.Web/Core/Routable/Module.txt b/src/Orchard.Web/Core/Routable/Module.txt index 4cd6d7542..f3305daed 100644 --- a/src/Orchard.Web/Core/Routable/Module.txt +++ b/src/Orchard.Web/Core/Routable/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The routable module enables content items to be accessed through a friendly human-readable URL. features: Routable: Description: Routable content part. diff --git a/src/Orchard.Web/Core/Scheduling/Module.txt b/src/Orchard.Web/Core/Scheduling/Module.txt index 97d361536..ce1e0d710 100644 --- a/src/Orchard.Web/Core/Scheduling/Module.txt +++ b/src/Orchard.Web/Core/Scheduling/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The scheduling module enables background task scheduling. features: Scheduling: Description: Scheduled background tasks. diff --git a/src/Orchard.Web/Core/Settings/Module.txt b/src/Orchard.Web/Core/Settings/Module.txt index c8d59b5aa..c0cadf45f 100644 --- a/src/Orchard.Web/Core/Settings/Module.txt +++ b/src/Orchard.Web/Core/Settings/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The settings module creates site settings that other modules can contribute to. features: Settings: Description: Site settings. diff --git a/src/Orchard.Web/Core/XmlRpc/Module.txt b/src/Orchard.Web/Core/XmlRpc/Module.txt index c316b47ed..bb9cbc636 100644 --- a/src/Orchard.Web/Core/XmlRpc/Module.txt +++ b/src/Orchard.Web/Core/XmlRpc/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The XmlRpc module enables creation of contents from client applications such as LiveWriter. features: XmlRpc: Description: XML-RPC opt-in implementation. diff --git a/src/Orchard.Web/Modules/Futures.Widgets/Module.txt b/src/Orchard.Web/Modules/Futures.Widgets/Module.txt index d0c984b8d..ca4c343dd 100644 --- a/src/Orchard.Web/Modules/Futures.Widgets/Module.txt +++ b/src/Orchard.Web/Modules/Futures.Widgets/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: A prototype implementation of Orchard widgets that only allows for editable global text regions. features: Futures.Widgets: Description: Widgets container with simple inline content editing widget. diff --git a/src/Orchard.Web/Modules/Orchard.Blogs/Module.txt b/src/Orchard.Web/Modules/Orchard.Blogs/Module.txt index 21c8b0f73..443905907 100644 --- a/src/Orchard.Web/Modules/Orchard.Blogs/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Blogs/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: The Orchard Blogs module is a package containing a couple of features. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The Orchard Blogs module is implementing basic blogging features. features: Orchard.Blogs: Description: A simple web log. diff --git a/src/Orchard.Web/Modules/Orchard.Comments/Module.txt b/src/Orchard.Web/Modules/Orchard.Comments/Module.txt index 924925da6..ac3cc1d22 100644 --- a/src/Orchard.Web/Modules/Orchard.Comments/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Comments/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The comments system implemented by this module can be applied to arbitrary Orchard content types, such as blogs and pages. It includes comment validation and spam protection through the Akismet service. features: Orchard.Comments: Description: Standard content item comments. diff --git a/src/Orchard.Web/Modules/Orchard.DevTools/Module.txt b/src/Orchard.Web/Modules/Orchard.DevTools/Module.txt index af8ab752c..40cb75a5e 100644 --- a/src/Orchard.Web/Modules/Orchard.DevTools/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.DevTools/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: This module is not activated by default and should only be used in a development environment. It contains various debugging and tracing tools that can display information about your content types. features: Orchard.DevTools: Description: An assortment of debuging tools. diff --git a/src/Orchard.Web/Modules/Orchard.Media/Module.txt b/src/Orchard.Web/Modules/Orchard.Media/Module.txt index 647a067dc..b8823d94f 100644 --- a/src/Orchard.Web/Modules/Orchard.Media/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Media/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The media module offer basic media management features. It currently only supports image files. Storage goes into the current Orchard file system, which can be the server's physical file system or Azure blob storage. features: Orchard.Media: Description: File system based media upload, storage and management. diff --git a/src/Orchard.Web/Modules/Orchard.MetaData/Module.txt b/src/Orchard.Web/Modules/Orchard.MetaData/Module.txt index a1aa2af92..6aee1f068 100644 --- a/src/Orchard.Web/Modules/Orchard.MetaData/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.MetaData/Module.txt @@ -1,5 +1,6 @@ name: MetaData antiforgery: enabled +description: The MetaData module enables the management of the content type meta data, which describes how content types are built from parts and parts from fields. features: Orchard.MetaData: Description: Module for managing Orchard MetaData diff --git a/src/Orchard.Web/Modules/Orchard.Modules/Module.txt b/src/Orchard.Web/Modules/Orchard.Modules/Module.txt index 014573eec..c7e8fbcb7 100644 --- a/src/Orchard.Web/Modules/Orchard.Modules/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Modules/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The Modules module enables the administrator of the site to manage the installed modules as well as activate and de-activate features. features: Orchard.Modules: Description: Standard module and feature management. diff --git a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt index 988c445fd..5f3c298f9 100644 --- a/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.MultiTenancy/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The multi-tenancy module enables multiple Orchard sites to run in isolation inside of a single web application, improving site density on a single server or hosted account. features: Orchard.MultiTenancy: Description: Configure multiple site tenants. diff --git a/src/Orchard.Web/Modules/Orchard.Pages/Module.txt b/src/Orchard.Web/Modules/Orchard.Pages/Module.txt index 18c453013..852f4b10d 100644 --- a/src/Orchard.Web/Modules/Orchard.Pages/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Pages/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The pages module enables the creation and management of pages on and Orchard web site. features: Orchard.Pages: Description: Simple pages. diff --git a/src/Orchard.Web/Modules/Orchard.Roles/Module.txt b/src/Orchard.Web/Modules/Orchard.Roles/Module.txt index 732a7a315..1d2465152 100644 --- a/src/Orchard.Web/Modules/Orchard.Roles/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Roles/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The roles module is adding the ability to assign roles to users. It's also providing a set of default roles for which other modules can define default permissions. features: Orchard.Roles: Description: Standard user roles. diff --git a/src/Orchard.Web/Modules/Orchard.Sandbox/Module.txt b/src/Orchard.Web/Modules/Orchard.Sandbox/Module.txt index 014100bff..df3ce3d93 100644 --- a/src/Orchard.Web/Modules/Orchard.Sandbox/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Sandbox/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The sandbox module is a testing ground for Orchard developers and should not be activated except for testing and development purposes. features: Orchard.Sandbox: Description: A module to mess around with. Currently wiki-like. diff --git a/src/Orchard.Web/Modules/Orchard.Search/Module.txt b/src/Orchard.Web/Modules/Orchard.Search/Module.txt index c6946e0c9..cf5bdabd0 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Search/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Orchard's built-in search module. +description: The search module enables the management of the search index and provides the front-end searching user interface. features: Orchard.Search: Description: Standard interface to Orchard's built-in search. diff --git a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs index 338d101bc..d21d4f991 100644 --- a/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs +++ b/src/Orchard.Web/Modules/Orchard.Search/Services/SearchService.cs @@ -37,11 +37,10 @@ namespace Orchard.Search.Services return null; var searchBuilder = _indexManager.GetSearchIndexProvider().CreateSearchBuilder(SearchIndexName) - .WithField("title", query) - .WithField("body", query); + .Parse(new [] {"title", "body"}, query); if(HttpContext.Current != null) { - searchBuilder.WithField("culture", _cultureManager.GetCurrentCulture(HttpContext.Current)); + searchBuilder.WithField("culture", _cultureManager.GetCurrentCulture(HttpContext.Current)).Mandatory(); } var totalCount = searchBuilder.Count(); diff --git a/src/Orchard.Web/Modules/Orchard.Setup/Module.txt b/src/Orchard.Web/Modules/Orchard.Setup/Module.txt index 53550c048..3bf5c77ec 100644 --- a/src/Orchard.Web/Modules/Orchard.Setup/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Setup/Module.txt @@ -4,8 +4,8 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The setup module is creating the application's setup experience. features: Orchard.Setup: - Description: Standard site setup. + Description: Standard site setup. This feature is disabled automatically once setup is over. Category: Core \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Module.txt b/src/Orchard.Web/Modules/Orchard.Tags/Module.txt index 3967783ad..6a1b6af45 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Tags/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The tags module is providing basic tagging for arbitrary content types. features: Orchard.Tags: Description: Tag a content item. diff --git a/src/Orchard.Web/Modules/Orchard.Themes/Module.txt b/src/Orchard.Web/Modules/Orchard.Themes/Module.txt index e58d8a853..5f181d746 100644 --- a/src/Orchard.Web/Modules/Orchard.Themes/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Themes/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The themes module makes it possible for Orchard applications to customize the look and feel of an Orchard web site. features: Orchard.Themes: Description: Basic theming capability. diff --git a/src/Orchard.Web/Modules/Orchard.Users/Module.txt b/src/Orchard.Web/Modules/Orchard.Users/Module.txt index c95c8701c..119273538 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Users/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent ut arcu turpis, et placerat nunc. Nunc sollicitudin iaculis est, in ultricies mi facilisis et. Aenean et tortor non metus adipiscing laoreet in a justo. Pellentesque faucibus nisl ac lectus mollis quis pellentesque tortor egestas. Curabitur vel velit semper nunc gravida scelerisque. Vivamus at tellus dolor, in ultrices quam posuere. +description: The users module enables user management. features: Orchard.Users: Description: Standard users. diff --git a/src/Orchard.Web/Modules/TinyMce/Module.txt b/src/Orchard.Web/Modules/TinyMce/Module.txt index 5277b4c50..c110596d5 100644 --- a/src/Orchard.Web/Modules/TinyMce/Module.txt +++ b/src/Orchard.Web/Modules/TinyMce/Module.txt @@ -4,7 +4,7 @@ author: The Orchard Team website: http://orchardproject.net version: 0.1 orchardversion: 0.1.2010.0312 -description: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas consectetur consequat risus, vel blandit arcu tincidunt eget. Nam rutrum nulla vestibulum dolor dapibus sagittis. Vivamus convallis faucibus accumsan. Suspendisse sapien enim, cursus at dignissim a, sollicitudin sit amet est. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Donec sed urna magna, in luctus nulla. Pellentesque erat ipsum, convallis sed molestie tempus, mattis vel leo metus. +description: The TinyMCE module enables rich text contents to be created using a "What You See Is What You Get" user interface. features: TinyMce: Description: TinyMCE HTML WYSIWYG editor. diff --git a/src/Orchard/Indexing/ISearchBuilder.cs b/src/Orchard/Indexing/ISearchBuilder.cs index 83e3ffda4..ebbf3f890 100644 --- a/src/Orchard/Indexing/ISearchBuilder.cs +++ b/src/Orchard/Indexing/ISearchBuilder.cs @@ -3,11 +3,13 @@ using System.Collections.Generic; namespace Orchard.Indexing { public interface ISearchBuilder { - - ISearchBuilder Parse(string defaultField, string query); + ISearchBuilder Parse(string[] defaultFields, string query); ISearchBuilder WithField(string field, string value); - ISearchBuilder WithField(string field, string value, bool wildcardSearch); + ISearchBuilder Mandatory(); + ISearchBuilder Forbidden(); + ISearchBuilder ExactMatch(); + ISearchBuilder Weighted(float weight); ISearchBuilder After(string name, DateTime date); ISearchBuilder Before(string name, DateTime date);