mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Modifying default parsing behavior in Lucene
--HG-- branch : 1.x
This commit is contained in:
@@ -231,14 +231,14 @@ namespace Orchard.Tests.Modules.Indexing {
|
|||||||
_provider.Store("default", _provider.New(2).Add("body", "Renaud is also in the kitchen.").Analyze().Add("title", "A love affair").Analyze());
|
_provider.Store("default", _provider.New(2).Add("body", "Renaud is also in the kitchen.").Analyze().Add("title", "A love affair").Analyze());
|
||||||
_provider.Store("default", _provider.New(3).Add("body", "Bertrand is a little bit jealous.").Analyze().Add("title", "Soap opera").Analyze());
|
_provider.Store("default", _provider.New(3).Add("body", "Bertrand is a little bit jealous.").Analyze().Add("title", "Soap opera").Analyze());
|
||||||
|
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen").Count(), Is.EqualTo(2));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen", false).Count(), Is.EqualTo(2));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen bertrand").Count(), Is.EqualTo(3));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen bertrand", false).Count(), Is.EqualTo(3));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen +bertrand").Count(), Is.EqualTo(1));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kitchen +bertrand", false).Count(), Is.EqualTo(1));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "+kitchen +bertrand").Count(), Is.EqualTo(0));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "+kitchen +bertrand", false).Count(), Is.EqualTo(0));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit").Count(), Is.EqualTo(0));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit", false).Count(), Is.EqualTo(0));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit*").Count(), Is.EqualTo(2));
|
Assert.That(_searchBuilder.Parse(new[] { "body" }, "kit*", false).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", false).Count(), Is.EqualTo(3));
|
||||||
Assert.That(_searchBuilder.Parse(new[] { "body", "title" }, "bradley love^3 soap").Search().First().ContentItemId, Is.EqualTo(2));
|
Assert.That(_searchBuilder.Parse(new[] { "body", "title" }, "bradley love^3 soap", false).Search().First().ContentItemId, Is.EqualTo(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@@ -308,6 +308,14 @@ namespace Orchard.Tests.Modules.Indexing {
|
|||||||
Assert.That(_searchBuilder.Parse("title", "home").WithField("culture", 1033).AsFilter().Count(), Is.EqualTo(1));
|
Assert.That(_searchBuilder.Parse("title", "home").WithField("culture", 1033).AsFilter().Count(), Is.EqualTo(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ParsedTextShouldBeEscapedByDefault() {
|
||||||
|
_provider.CreateIndex("default");
|
||||||
|
_provider.Store("default", _provider.New(1).Add("body", "foo.bar").Analyze());
|
||||||
|
|
||||||
|
Assert.That(_searchBuilder.Parse("body", "*@!woo*@!").Count(), Is.EqualTo(0));
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void FieldsCanContainMultipleValue() {
|
public void FieldsCanContainMultipleValue() {
|
||||||
_provider.CreateIndex("default");
|
_provider.CreateIndex("default");
|
||||||
|
@@ -48,11 +48,11 @@ namespace Lucene.Services {
|
|||||||
InitPendingClause();
|
InitPendingClause();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISearchBuilder Parse(string defaultField, string query) {
|
public ISearchBuilder Parse(string defaultField, string query, bool escape, bool mandatory) {
|
||||||
return Parse(new[] {defaultField}, query);
|
return Parse(new[] {defaultField}, query, escape, mandatory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISearchBuilder Parse(string[] defaultFields, string query) {
|
public ISearchBuilder Parse(string[] defaultFields, string query, bool escape, bool mandatory) {
|
||||||
if ( defaultFields.Length == 0 ) {
|
if ( defaultFields.Length == 0 ) {
|
||||||
throw new ArgumentException("Default field can't be empty");
|
throw new ArgumentException("Default field can't be empty");
|
||||||
}
|
}
|
||||||
@@ -61,9 +61,13 @@ namespace Lucene.Services {
|
|||||||
throw new ArgumentException("Query can't be empty");
|
throw new ArgumentException("Query can't be empty");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (escape) {
|
||||||
|
query = QueryParser.Escape(query);
|
||||||
|
}
|
||||||
|
|
||||||
var analyzer = LuceneIndexProvider.CreateAnalyzer();
|
var analyzer = LuceneIndexProvider.CreateAnalyzer();
|
||||||
foreach ( var defaultField in defaultFields ) {
|
foreach ( var defaultField in defaultFields ) {
|
||||||
var clause = new BooleanClause(new QueryParser(LuceneIndexProvider.LuceneVersion, defaultField, analyzer).Parse(query), BooleanClause.Occur.SHOULD);
|
var clause = new BooleanClause(new QueryParser(LuceneIndexProvider.LuceneVersion, defaultField, analyzer).Parse(query), mandatory ? BooleanClause.Occur.MUST : BooleanClause.Occur.SHOULD);
|
||||||
_clauses.Add(clause);
|
_clauses.Add(clause);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -3,8 +3,8 @@ using System.Collections.Generic;
|
|||||||
|
|
||||||
namespace Orchard.Indexing {
|
namespace Orchard.Indexing {
|
||||||
public interface ISearchBuilder {
|
public interface ISearchBuilder {
|
||||||
ISearchBuilder Parse(string defaultField, string query);
|
ISearchBuilder Parse(string defaultField, string query, bool escape = true, bool mandatory = false);
|
||||||
ISearchBuilder Parse(string[] defaultFields, string query);
|
ISearchBuilder Parse(string[] defaultFields, string query, bool escape = true, bool mandatory = false);
|
||||||
|
|
||||||
ISearchBuilder WithField(string field, bool value);
|
ISearchBuilder WithField(string field, bool value);
|
||||||
ISearchBuilder WithField(string field, DateTime value);
|
ISearchBuilder WithField(string field, DateTime value);
|
||||||
|
@@ -4,11 +4,11 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace Orchard.Indexing {
|
namespace Orchard.Indexing {
|
||||||
public class NullSearchBuilder : ISearchBuilder {
|
public class NullSearchBuilder : ISearchBuilder {
|
||||||
public ISearchBuilder Parse(string defaultField, string query) {
|
public ISearchBuilder Parse(string defaultField, string query, bool escape, bool mandatory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISearchBuilder Parse(string[] defaultFields, string query) {
|
public ISearchBuilder Parse(string[] defaultFields, string query, bool escape, bool mandatory) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user