You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by pn...@apache.org on 2011/05/12 09:05:13 UTC
[Lucene.Net] svn commit: r1102182 - in /incubator/lucene.net/trunk: build/vs2010/contrib/
src/contrib/Regex/ src/contrib/Regex/Properties/
Author: pnasser
Date: Thu May 12 07:05:13 2011
New Revision: 1102182
URL: http://svn.apache.org/viewvc?rev=1102182&view=rev
Log:
LUCENENET-330 Search.Regex minimal port (in Trunk)
Added:
incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.Regex.sln
incubator/lucene.net/trunk/src/contrib/Regex/
incubator/lucene.net/trunk/src/contrib/Regex/CSharpRegexCapabilities.cs
incubator/lucene.net/trunk/src/contrib/Regex/Contrib.Regex.csproj
incubator/lucene.net/trunk/src/contrib/Regex/IRegexCapabilities.cs
incubator/lucene.net/trunk/src/contrib/Regex/IRegexQueryCapable.cs
incubator/lucene.net/trunk/src/contrib/Regex/Properties/
incubator/lucene.net/trunk/src/contrib/Regex/Properties/AssemblyInfo.cs
incubator/lucene.net/trunk/src/contrib/Regex/RegexQuery.cs
incubator/lucene.net/trunk/src/contrib/Regex/RegexTermEnum.cs
incubator/lucene.net/trunk/src/contrib/Regex/SpanRegexQuery.cs
Modified:
incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.All.sln
Modified: incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.All.sln
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.All.sln?rev=1102182&r1=1102181&r2=1102182&view=diff
==============================================================================
--- incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.All.sln (original)
+++ incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.All.sln Thu May 12 07:05:13 2011
@@ -1,6 +1,6 @@

Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C# Express 2010
+# Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net", "..\..\..\src\core\Lucene.Net.csproj", "{5D4AD9BE-1FFB-41AB-9943-25737971BF57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contrib.Core", "..\..\..\src\contrib\Core\Contrib.Core.csproj", "{FEF899EB-610C-4D3C-A556-A01F56F4AFE0}"
@@ -27,6 +27,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contrib.WordNet.Syns2Index", "..\..\..\src\contrib\WordNet\Syns2Index\Contrib.WordNet.Syns2Index.csproj", "{7563D4D9-AE91-42BA-A270-1D264660F6DF}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contrib.Regex", "..\..\..\src\contrib\Regex\Contrib.Regex.csproj", "{A26BD3B7-DF90-43B4-99E2-6A617CDE1579}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -85,6 +87,10 @@ Global
{7563D4D9-AE91-42BA-A270-1D264660F6DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7563D4D9-AE91-42BA-A270-1D264660F6DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7563D4D9-AE91-42BA-A270-1D264660F6DF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Added: incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.Regex.sln
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.Regex.sln?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.Regex.sln (added)
+++ incubator/lucene.net/trunk/build/vs2010/contrib/Contrib.Regex.sln Thu May 12 07:05:13 2011
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net", "..\..\..\src\core\Lucene.Net.csproj", "{5D4AD9BE-1FFB-41AB-9943-25737971BF57}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contrib.Core", "..\..\..\src\contrib\Regex\Contrib.Regex.csproj", "{A26BD3B7-DF90-43B4-99E2-6A617CDE1579}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A26BD3B7-DF90-43B4-99E2-6A617CDE1579}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
Added: incubator/lucene.net/trunk/src/contrib/Regex/CSharpRegexCapabilities.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/CSharpRegexCapabilities.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/CSharpRegexCapabilities.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/CSharpRegexCapabilities.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// C# Regex based implementation of <see cref="IRegexCapabilities"/>.
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/JavaUtilRegexCapabilities.java.htm</remarks>
+ public class CSharpRegexCapabilities : IRegexCapabilities, IEquatable<CSharpRegexCapabilities>
+ {
+ private System.Text.RegularExpressions.Regex _rPattern;
+
+ /// <summary>
+ /// Called by the constructor of <see cref="RegexTermEnum"/> allowing implementations to cache
+ /// a compiled version of the regular expression pattern.
+ /// </summary>
+ /// <param name="pattern">regular expression pattern</param>
+ public void Compile(string pattern)
+ {
+ _rPattern = new System.Text.RegularExpressions.Regex(pattern,
+ System.Text.RegularExpressions.RegexOptions.Compiled);
+ }
+
+ /// <summary>
+ /// True on match.
+ /// </summary>
+ /// <param name="s">text to match</param>
+ /// <returns>true on match</returns>
+ public bool Match(string s)
+ {
+ return _rPattern.IsMatch(s);
+ }
+
+ /// <summary>
+ /// A wise prefix implementation can reduce the term enumeration (and thus performance)
+ /// of RegexQuery dramatically.
+ /// </summary>
+ /// <returns>static non-regex prefix of the pattern last passed to <see cref="IRegexCapabilities.Compile"/>.
+ /// May return null</returns>
+ public string Prefix()
+ {
+ return null;
+ }
+
+ /// <summary>
+ /// Indicates whether the current object is equal to another object of the same type.
+ /// </summary>
+ /// <returns>
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
+ /// </returns>
+ /// <param name="other">An object to compare with this object</param>
+ public bool Equals(CSharpRegexCapabilities other)
+ {
+ if (other == null) return false;
+ if (this == other) return true;
+
+ if (_rPattern != null ? !_rPattern.Equals(other._rPattern) : other._rPattern != null)
+ return false;
+
+ return true;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj as CSharpRegexCapabilities == null) return false;
+ return Equals((CSharpRegexCapabilities) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return (_rPattern != null ? _rPattern.GetHashCode() : 0);
+ }
+ }
+}
Added: incubator/lucene.net/trunk/src/contrib/Regex/Contrib.Regex.csproj
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/Contrib.Regex.csproj?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/Contrib.Regex.csproj (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/Contrib.Regex.csproj Thu May 12 07:05:13 2011
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{A26BD3B7-DF90-43B4-99E2-6A617CDE1579}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Contrib.Regex</RootNamespace>
+ <AssemblyName>Contrib.Regex</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\..\..\bin\contrib\Regex\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="CSharpRegexCapabilities.cs" />
+ <Compile Include="IRegexCapabilities.cs" />
+ <Compile Include="IRegexQueryCapable.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="RegexQuery.cs" />
+ <Compile Include="RegexTermEnum.cs" />
+ <Compile Include="SpanRegexQuery.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\..\core\Lucene.Net.csproj">
+ <Project>{5D4AD9BE-1FFB-41AB-9943-25737971BF57}</Project>
+ <Name>Lucene.Net</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project>
\ No newline at end of file
Added: incubator/lucene.net/trunk/src/contrib/Regex/IRegexCapabilities.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/IRegexCapabilities.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/IRegexCapabilities.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/IRegexCapabilities.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// Defines basic operations needed by {@link RegexQuery} for a regular expression implementation.
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexCapabilities.java.htm</remarks>
+ public interface IRegexCapabilities
+ {
+ /// <summary>
+ /// Called by the constructor of <see cref="RegexTermEnum"/> allowing implementations to cache
+ /// a compiled version of the regular expression pattern.
+ /// </summary>
+ /// <param name="pattern">regular expression pattern</param>
+ void Compile(string pattern);
+
+ /// <summary>
+ /// True on match.
+ /// </summary>
+ /// <param name="s">text to match</param>
+ /// <returns>true on match</returns>
+ bool Match(string s);
+
+ /// <summary>
+ /// A wise prefix implementation can reduce the term enumeration (and thus performance)
+ /// of RegexQuery dramatically.
+ /// </summary>
+ /// <returns>static non-regex prefix of the pattern last passed to <see cref="Compile"/>.
+ /// May return null</returns>
+ string Prefix();
+ }
+}
Added: incubator/lucene.net/trunk/src/contrib/Regex/IRegexQueryCapable.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/IRegexQueryCapable.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/IRegexQueryCapable.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/IRegexQueryCapable.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// Defines methods for regular expression supporting queries to use.
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexQueryCapable.java.htm</remarks>
+ public interface IRegexQueryCapable
+ {
+ void SetRegexImplementation(IRegexCapabilities impl);
+ IRegexCapabilities GetRegexImplementation();
+ }
+}
Added: incubator/lucene.net/trunk/src/contrib/Regex/Properties/AssemblyInfo.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/Properties/AssemblyInfo.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/Properties/AssemblyInfo.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/Properties/AssemblyInfo.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,53 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Lucene.Net.Contrib.Regex")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("The Apache Software Foundation")]
+[assembly: AssemblyProduct("Lucene.Net.Contrib.Regex")]
+[assembly: AssemblyCopyright("Copyright 2006 - 2011 The Apache Software Foundation")]
+[assembly: AssemblyTrademark("Copyright 2006 - 2011 The Apache Software Foundation")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7c479233-95a2-4d53-b0fd-0ad2389556b1")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("2.9.4")]
+[assembly: AssemblyFileVersion("2.9.4")]
Added: incubator/lucene.net/trunk/src/contrib/Regex/RegexQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/RegexQuery.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/RegexQuery.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/RegexQuery.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using Lucene.Net.Index;
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// Regular expression based query.
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexQuery.java.htm</remarks>
+ public class RegexQuery : MultiTermQuery, IRegexQueryCapable, IEquatable<RegexQuery>
+ {
+ private IRegexCapabilities _regexImpl = new CSharpRegexCapabilities();
+
+ public RegexQuery(Term term) : base(term)
+ {
+ }
+
+ /// <summary>Construct the enumeration to be used, expanding the pattern term. </summary>
+ public override FilteredTermEnum GetEnum(IndexReader reader)
+ {
+ Term term = new Term(GetTerm().Field(), GetTerm().Text());
+ return new RegexTermEnum(reader, term, _regexImpl);
+ }
+
+ public void SetRegexImplementation(IRegexCapabilities impl)
+ {
+ _regexImpl = impl;
+ }
+
+ public IRegexCapabilities GetRegexImplementation()
+ {
+ return _regexImpl;
+ }
+
+ /// <summary>
+ /// Indicates whether the current object is equal to another object of the same type.
+ /// </summary>
+ /// <returns>
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
+ /// </returns>
+ /// <param name="other">An object to compare with this object</param>
+ public bool Equals(RegexQuery other)
+ {
+ if (other == null) return false;
+ if (this == other) return true;
+
+ if (!base.Equals(other)) return false;
+ return _regexImpl.Equals(other._regexImpl);
+ }
+
+ public override bool Equals(object obj)
+ {
+ if ((obj == null) || (obj as RegexQuery == null)) return false;
+ if (this == obj) return true;
+
+ return Equals((RegexQuery) obj);
+ }
+
+ public override int GetHashCode()
+ {
+ return 29 * base.GetHashCode() + _regexImpl.GetHashCode();
+ }
+ }
+}
Added: incubator/lucene.net/trunk/src/contrib/Regex/RegexTermEnum.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/RegexTermEnum.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/RegexTermEnum.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/RegexTermEnum.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using Lucene.Net.Index;
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// Subclass of FilteredTermEnum for enumerating all terms that match the
+ /// specified regular expression term using the specified regular expression
+ /// implementation.
+ /// <para>Term enumerations are always ordered by Term.compareTo(). Each term in
+ /// the enumeration is greater than all that precede it.</para>
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/RegexTermEnum.java.htm</remarks>
+ public class RegexTermEnum : FilteredTermEnum
+ {
+ private string _sField = "";
+ private string _sPre = "";
+ private bool _bEndEnum;
+ private readonly IRegexCapabilities _regexImpl;
+
+ public RegexTermEnum(IndexReader reader, Term term, IRegexCapabilities regexImpl)
+ {
+ _sField = term.Field();
+ string sText = term.Text();
+
+ _regexImpl = regexImpl;
+
+ _regexImpl.Compile(sText);
+
+ _sPre = _regexImpl.Prefix() ?? "";
+
+ SetEnum(reader.Terms(new Term(term.Field(), _sPre)));
+ }
+
+ /// <summary>Equality compare on the term </summary>
+ public override bool TermCompare(Term term)
+ {
+ if (_sField == term.Field())
+ {
+ string sSearchText = term.Text();
+ if (sSearchText.StartsWith(_sPre)) return _regexImpl.Match(sSearchText);
+ } //eif
+
+ _bEndEnum = true;
+ return false;
+ }
+
+ /// <summary>Equality measure on the term </summary>
+ public override float Difference()
+ {
+ // TODO: adjust difference based on distance of searchTerm.text() and term().text()
+ return 1.0F;
+ }
+
+ /// <summary>Indicates the end of the enumeration has been reached </summary>
+ public override bool EndEnum()
+ {
+ return _bEndEnum;
+ }
+
+ //public override void Close()
+ //{
+ // base.Close();
+ // _sField = null;
+ //}
+ }
+}
Added: incubator/lucene.net/trunk/src/contrib/Regex/SpanRegexQuery.cs
URL: http://svn.apache.org/viewvc/incubator/lucene.net/trunk/src/contrib/Regex/SpanRegexQuery.cs?rev=1102182&view=auto
==============================================================================
--- incubator/lucene.net/trunk/src/contrib/Regex/SpanRegexQuery.cs (added)
+++ incubator/lucene.net/trunk/src/contrib/Regex/SpanRegexQuery.cs Thu May 12 07:05:13 2011
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Text;
+using Lucene.Net.Index;
+using Lucene.Net.Search.Spans;
+using Lucene.Net.Util;
+
+namespace Lucene.Net.Search.Regex
+{
+ /// <summary>
+ /// A SpanQuery version of <see cref="RegexQuery"/> allowing regular expression queries to be nested
+ /// within other SpanQuery subclasses.
+ /// </summary>
+ /// <remarks>http://www.java2s.com/Open-Source/Java-Document/Net/lucene-connector/org/apache/lucene/search/regex/SpanRegexQuery.java.htm</remarks>
+ public class SpanRegexQuery : SpanQuery, IRegexQueryCapable, IEquatable<SpanRegexQuery>
+ {
+ private IRegexCapabilities _regexImpl = new CSharpRegexCapabilities();
+ private readonly Term _term;
+
+ public SpanRegexQuery(Term term)
+ {
+ _term = term;
+ }
+
+ public Term GetTerm()
+ {
+ return _term;
+ }
+
+ public override string ToString(string field)
+ {
+ StringBuilder sb = new StringBuilder();
+ sb.Append("SpanRegexQuery(");
+ sb.Append(_term);
+ sb.Append(')');
+ sb.Append(ToStringUtils.Boost(GetBoost()));
+ return sb.ToString();
+ }
+
+ public override Query Rewrite(IndexReader reader)
+ {
+ RegexQuery orig = new RegexQuery(_term);
+ orig.SetRegexImplementation(_regexImpl);
+
+ // RegexQuery (via MultiTermQuery).Rewrite always returns a BooleanQuery
+ orig.SetRewriteMethod(MultiTermQuery.SCORING_BOOLEAN_QUERY_REWRITE); //@@
+ BooleanQuery bq = (BooleanQuery) orig.Rewrite(reader);
+
+ BooleanClause[] clauses = bq.GetClauses();
+ SpanQuery[] sqs = new SpanQuery[clauses.Length];
+ for (int i = 0; i < clauses.Length; i++)
+ {
+ BooleanClause clause = clauses[i];
+
+ // Clauses from RegexQuery.Rewrite are always TermQuery's
+ TermQuery tq = (TermQuery) clause.GetQuery();
+
+ sqs[i] = new SpanTermQuery(tq.GetTerm());
+ sqs[i].SetBoost(tq.GetBoost());
+ } //efor
+
+ SpanOrQuery query = new SpanOrQuery(sqs);
+ query.SetBoost(orig.GetBoost());
+
+ return query;
+ }
+
+ /// <summary>Expert: Returns the matches for this query in an index. Used internally
+ /// to search for spans.
+ /// </summary>
+ public override Spans.Spans GetSpans(IndexReader reader)
+ {
+ throw new InvalidOperationException("Query should have been rewritten");
+ }
+
+ /// <summary>Returns the name of the field matched by this query.</summary>
+ public override string GetField()
+ {
+ return _term.Field();
+ }
+
+ /// <summary>Returns a collection of all terms matched by this query.</summary>
+ /// <deprecated> use extractTerms instead
+ /// </deprecated>
+ /// <seealso cref="Query.ExtractTerms">
+ /// </seealso>
+ [Obsolete("use ExtractTerms instead")]
+ public override ICollection GetTerms()
+ {
+ ArrayList terms = new ArrayList {_term};
+ return terms;
+ }
+
+ public void SetRegexImplementation(IRegexCapabilities impl)
+ {
+ _regexImpl = impl;
+ }
+
+ public IRegexCapabilities GetRegexImplementation()
+ {
+ return _regexImpl;
+ }
+
+ /// <summary>
+ /// Indicates whether the current object is equal to another object of the same type.
+ /// </summary>
+ /// <returns>
+ /// true if the current object is equal to the <paramref name="other"/> parameter; otherwise, false.
+ /// </returns>
+ /// <param name="other">An object to compare with this object.
+ /// </param>
+ public bool Equals(SpanRegexQuery other)
+ {
+ if (other == null) return false;
+ if (this == other) return true;
+
+ if (!_regexImpl.Equals(other._regexImpl)) return false;
+ if (!_term.Equals(other._term)) return false;
+
+ return true;
+ }
+
+ /// <summary>
+ /// True if this object equals the specified object.
+ /// </summary>
+ /// <param name="obj">object</param>
+ /// <returns>true on equality</returns>
+ public override bool Equals(object obj)
+ {
+ if (obj as SpanRegexQuery == null) return false;
+
+ return Equals((SpanRegexQuery) obj);
+ }
+
+ /// <summary>
+ /// Get hash code for this object.
+ /// </summary>
+ /// <returns>hash code</returns>
+ public override int GetHashCode()
+ {
+ return 29 * _regexImpl.GetHashCode() + _term.GetHashCode();
+ }
+ }
+}