Skip to content

Commit d574f11

Browse files
committed
readme and example updates
1 parent e31e02d commit d574f11

File tree

8 files changed

+181
-30
lines changed

8 files changed

+181
-30
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="Lucene.Net.Analysis.Common" Version="4.8.0-beta00012" />
10+
<PackageReference Include="Lucene.Net.Sql.MySql" Version="0.0.3-alpha" />
11+
</ItemGroup>
12+
13+
</Project>
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using Lucene.Net.Analysis.Standard;
2+
using Lucene.Net.Documents;
3+
using Lucene.Net.Index;
4+
using Lucene.Net.Search;
5+
using Lucene.Net.Util;
6+
7+
namespace Lucene.Net.Sql.MySql.Example
8+
{
9+
// dotnet pack -c Release -o out --version-suffix 0.0.3-alpha Lucene.Net.Sql.MySql/Lucene.Net.Sql.MySql.csproj
10+
public class Program
11+
{
12+
public static void Main(string[] args)
13+
{
14+
const string connectionString = "server=localhost;port=3306;database=lucene;uid=root;password=password;Allow User Variables=True;";
15+
16+
var options = new SqlDirectoryOptions(connectionString, "ExampleDirectory");
17+
18+
using var mySqlOperator = MySqlLuceneOperator.Create(options);
19+
20+
using var directory = new LuceneSqlDirectory(options, mySqlOperator);
21+
22+
using var analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
23+
24+
using var writer = new IndexWriter(directory, new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer));
25+
26+
var source = new
27+
{
28+
Name = "Kermit the Frog",
29+
FavoritePhrase = "The quick brown fox jumps over the lazy dog"
30+
};
31+
32+
var doc = new Document
33+
{
34+
new StringField(
35+
"name",
36+
source.Name,
37+
Field.Store.YES),
38+
new TextField(
39+
"favoritePhrase",
40+
source.FavoritePhrase,
41+
Field.Store.YES)
42+
};
43+
44+
writer.AddDocument(doc);
45+
46+
writer.Flush(false, false);
47+
48+
var phrase = new MultiPhraseQuery
49+
{
50+
new Term("favoritePhrase", "brown"),
51+
new Term("favoritePhrase", "fox")
52+
};
53+
54+
var searcher = new IndexSearcher(writer.GetReader(true));
55+
56+
var result = searcher.Search(phrase, 20);
57+
}
58+
}
59+
}

Lucene.Net.Sql.MySql/Lucene.Net.Sql.MySql.csproj

+4-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
<Product>Lucene.Net SQL</Product>
1212
<Title>Lucene.Net SQL</Title>
1313
<Description>Lucene.NET SQL is a library that enables persistance of Lucene index files to SQL databases.</Description>
14-
<Copyright>MIT</Copyright>
15-
<PackageLicenseExpression>MIT</PackageLicenseExpression>
14+
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
15+
<Copyright>GPL-3.0-or-later</Copyright>
16+
<PackageLicenseExpression>GPL-3.0-or-later</PackageLicenseExpression>
1617
<PackageProjectUrl>https://github.com/GowenGit/Lucene-net-sql</PackageProjectUrl>
1718
<RepositoryUrl>https://github.com/GowenGit/Lucene-net-sql</RepositoryUrl>
1819
<PackageTags>Lucene; SQL; MySQL; Storage; Directory; MySql</PackageTags>
@@ -49,6 +50,7 @@
4950
<Target Name="IncludeReferenceAssets">
5051
<ItemGroup>
5152
<BuildOutputInPackage Include="$(OutputPath)Lucene.Net.Sql.dll" />
53+
<BuildOutputInPackage Include="$(OutputPath)Lucene.Net.Sql.xml" />
5254
</ItemGroup>
5355
</Target>
5456
</Project>

Lucene.Net.Sql.Performance/LuceneLiteBenchmark.cs

+26-24
Original file line numberDiff line numberDiff line change
@@ -23,59 +23,61 @@ public override void GlobalSetup()
2323
}
2424

2525
[Benchmark]
26-
public void FuzzySearchMySqlLightNovel()
26+
public void FuzzySearchMySqlTenNovels()
2727
{
2828
FuzzySearch(MySqlWriter);
2929
}
3030

3131
[Benchmark]
32-
public void FuzzySearchFileSystemLightNovel()
32+
public void FuzzySearchFileSystemTenNovels()
3333
{
3434
FuzzySearch(FileWriter);
3535
}
3636

3737
[Benchmark]
38-
public void QuerySearchMySqlLightNovel()
38+
public void QuerySearchMySqlTenNovels()
3939
{
4040
QuerySearch(MySqlWriter);
4141
}
4242

4343
[Benchmark]
44-
public void QuerySearchFileSystemLightNovel()
44+
public void QuerySearchFileSystemTenNovels()
4545
{
4646
QuerySearch(FileWriter);
4747
}
4848

4949
private static void IndexData(IndexWriter writer)
5050
{
51-
var text = File.ReadAllText("Data/data_01");
51+
for (var i = 1; i <= 10; i++)
52+
{
53+
var file = $"Data/data_{i:00}";
5254

53-
var lines = text.Split(
54-
new[] { "\r\n", "\r", "\n" },
55-
StringSplitOptions.None
56-
);
55+
var lines = File.ReadAllText(file).Split(
56+
new[] { "\r\n", "\r", "\n" },
57+
StringSplitOptions.None
58+
);
5759

58-
for (var i = 0; i < lines.Length; i++)
59-
{
60-
var doc = new Document
60+
for (var j = 0; j < lines.Length; j++)
6161
{
62-
new Int32Field(
63-
"line",
64-
i,
65-
Field.Store.YES),
66-
new TextField(
67-
"text",
68-
lines[i],
69-
Field.Store.YES)
70-
};
71-
72-
writer.AddDocument(doc);
62+
var doc = new Document
63+
{
64+
new Int32Field(
65+
"line",
66+
j,
67+
Field.Store.YES),
68+
new TextField(
69+
"text",
70+
lines[j],
71+
Field.Store.YES)
72+
};
73+
74+
writer.AddDocument(doc);
75+
}
7376
}
7477

7578
writer.Flush(false, false);
7679
}
7780

78-
7981
private static void FuzzySearch(IndexWriter writer)
8082
{
8183
var phrase = new FuzzyQuery(new Term("text", "Mary"));

Lucene.Net.Sql.Performance/Program.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ public class Program
77
{
88
public static void Main(string[] args)
99
{
10-
BenchmarkRunner.Run<LuceneLiteBenchmark>();
11-
// BenchmarkRunner.Run<LuceneHeavyBenchmark>();
10+
// BenchmarkRunner.Run<LuceneLiteBenchmark>();
11+
BenchmarkRunner.Run<LuceneHeavyBenchmark>();
1212
}
1313
}
1414
}

NuGet.config

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<configuration>
2+
<packageSources>
3+
<add key="repositoryPath" value="./out" />
4+
</packageSources>
5+
</configuration>

README.md

+64
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,67 @@ Lucene.NET SQL is a library that enables persistance of Lucene index files to SQ
1313
## Status
1414

1515
Currently this package is in `alpha` while we wait for `lucene.net 4.8` to be released.
16+
17+
## License
18+
19+
### Commercial license
20+
21+
If you want to use Lucene.NET SQL to develop commercial projects, and applications, the Commercial license is the appropriate license. With this option, your source code is kept proprietary. Purchase a Lucene.NET SQL Commercial License at [gowengit.github.io/lucene-net-sql](https://gowengit.github.io/lucene-net-sql)
22+
23+
### Open source license
24+
25+
If you are creating an open source application under a license compatible with the [GNU GPL license v3](https://www.gnu.org/licenses/gpl-3.0.html), you may use Lucene.NET SQL under the terms of the GPLv3.
26+
27+
## Examples
28+
29+
Below are some general use examples of the library.
30+
31+
### MySQL
32+
33+
```cs
34+
var options = new SqlDirectoryOptions(connectionString, "ExampleDirectory");
35+
36+
using var mySqlOperator = MySqlLuceneOperator.Create(options);
37+
38+
using var directory = new LuceneSqlDirectory(options, mySqlOperator);
39+
40+
// Rest is standard Lucene code
41+
42+
using var analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48);
43+
44+
using var writer = new IndexWriter(directory, new IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer));
45+
46+
// ...
47+
```
48+
49+
*Note:* `MySqlLuceneOperator` is linked to a single `MySQL` connection so should be either transient or short lived.
50+
51+
## Performance Benchmarks
52+
53+
Performance benchmarks were done to compare local file system vs local SQL instance performance.
54+
55+
``` ini
56+
BenchmarkDotNet=v0.12.1, OS=Windows 10.0.19041.508 (2004/?/20H1)
57+
AMD Ryzen 5 2600, 1 CPU, 12 logical and 6 physical cores
58+
.NET Core SDK=3.1.401
59+
[Host] : .NET Core 3.1.7 (CoreCLR 4.700.20.36602, CoreFX 4.700.20.37001), X64 RyuJIT
60+
Job-QKPTDT : .NET Core 3.1.7 (CoreCLR 4.700.20.36602, CoreFX 4.700.20.37001), X64 RyuJIT
61+
```
62+
63+
### A run on ten indexed novels line by line, around *7MB* of text data.
64+
65+
| Method | Mean | Error | StdDev | Median |
66+
|------------------------------- |----------:|----------:|----------:|----------:|
67+
| FuzzySearchMySqlTenNovels | 28.877 ms | 0.4831 ms | 0.4519 ms | 28.771 ms |
68+
| FuzzySearchFileSystemTenNovels | 3.107 ms | 0.0950 ms | 0.2771 ms | 3.046 ms |
69+
| QuerySearchMySqlTenNovels | 6.424 ms | 0.1187 ms | 0.2554 ms | 6.332 ms |
70+
| QuerySearchFileSystemTenNovels | 1.170 ms | 0.0233 ms | 0.0635 ms | 1.143 ms |
71+
72+
### A run on one hundred indexed novels, around *70MB* of text data.
73+
74+
| Method | Mean | Error | StdDev | Median |
75+
|----------------------------------- |----------:|---------:|---------:|----------:|
76+
| FuzzySearchMySqlHundredNovels | 290.90 ms | 1.621 ms | 1.354 ms | 290.74 ms |
77+
| FuzzySearchFileSystemHundredNovels | 20.94 ms | 0.288 ms | 0.256 ms | 20.83 ms |
78+
| QuerySearchMySqlHundredNovels | 52.00 ms | 1.012 ms | 1.082 ms | 51.85 ms |
79+
| QuerySearchFileSystemHundredNovels | 11.44 ms | 0.207 ms | 0.388 ms | 11.24 ms |

lucene-net-sql.sln

+8-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lucene.Net.Sql", "Lucene.Ne
77
EndProject
88
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lucene.Net.Sql.Tests", "Lucene.Net.Sql.Tests\Lucene.Net.Sql.Tests.csproj", "{3734271B-D0E1-4D5E-89EB-E1EB1D8753F9}"
99
EndProject
10-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Sql.MySql", "Lucene.Net.Sql.MySql\Lucene.Net.Sql.MySql.csproj", "{EDBA6E09-4581-476E-88E6-DBFD24B1A561}"
10+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lucene.Net.Sql.MySql", "Lucene.Net.Sql.MySql\Lucene.Net.Sql.MySql.csproj", "{EDBA6E09-4581-476E-88E6-DBFD24B1A561}"
1111
EndProject
12-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Sql.Performance", "Lucene.Net.Sql.Performance\Lucene.Net.Sql.Performance.csproj", "{D7AD39A2-F26F-45A1-8581-0ACB31E55923}"
12+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Lucene.Net.Sql.Performance", "Lucene.Net.Sql.Performance\Lucene.Net.Sql.Performance.csproj", "{D7AD39A2-F26F-45A1-8581-0ACB31E55923}"
13+
EndProject
14+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lucene.Net.Sql.MySql.Example", "Lucene.Net.Sql.MySql.Example\Lucene.Net.Sql.MySql.Example.csproj", "{81A7EFC1-B3DF-423D-8155-732BFA5C0F26}"
1315
EndProject
1416
Global
1517
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -33,6 +35,10 @@ Global
3335
{D7AD39A2-F26F-45A1-8581-0ACB31E55923}.Debug|Any CPU.Build.0 = Debug|Any CPU
3436
{D7AD39A2-F26F-45A1-8581-0ACB31E55923}.Release|Any CPU.ActiveCfg = Release|Any CPU
3537
{D7AD39A2-F26F-45A1-8581-0ACB31E55923}.Release|Any CPU.Build.0 = Release|Any CPU
38+
{81A7EFC1-B3DF-423D-8155-732BFA5C0F26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
39+
{81A7EFC1-B3DF-423D-8155-732BFA5C0F26}.Debug|Any CPU.Build.0 = Debug|Any CPU
40+
{81A7EFC1-B3DF-423D-8155-732BFA5C0F26}.Release|Any CPU.ActiveCfg = Release|Any CPU
41+
{81A7EFC1-B3DF-423D-8155-732BFA5C0F26}.Release|Any CPU.Build.0 = Release|Any CPU
3642
EndGlobalSection
3743
GlobalSection(SolutionProperties) = preSolution
3844
HideSolutionNode = FALSE

0 commit comments

Comments
 (0)