Skip to content

Commit

Permalink
restructure
Browse files Browse the repository at this point in the history
  • Loading branch information
jmd authored and jmd committed Sep 15, 2023
1 parent c9049bf commit a3b5e4c
Show file tree
Hide file tree
Showing 28 changed files with 535 additions and 412 deletions.
87 changes: 0 additions & 87 deletions src/DotJEM.Json.Index2.QueryParsers.Test/Class1.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Lucene.Net.QueryParser" Version="4.8.0-beta00016" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="NUnit" Version="3.13.3" />
</ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
using DotJEM.Json.Index2.Configuration;
using DotJEM.Json.Index2.Documents.Fields;
using DotJEM.Json.Index2.IO;
using DotJEM.Json.Index2.QueryParsers.Query;
using DotJEM.Json.Index2.Results;
using DotJEM.Json.Index2.Searching;
using Lucene.Net.Analysis.En;
using Lucene.Net.Analysis.Standard;
using Lucene.Net.Analysis.Util;
using Lucene.Net.Index;
using Lucene.Net.QueryParsers.Classic;
using Lucene.Net.QueryParsers.Flexible.Standard;
using Lucene.Net.Search;
using Lucene.Net.Util;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NUnit.Framework;

namespace DotJEM.Json.Index2.QueryParsers.Test;

public class SimplifiedLuceneQueryParserTest
{
[Test]
public async Task SayHello_ReturnsHello()
{
IJsonIndex index = new JsonIndexBuilder("myIndex")
.UsingMemmoryStorage()
.WithAnalyzer(cfg => new StandardAnalyzer(cfg.Version, CharArraySet.EMPTY_SET))
.WithFieldResolver(new FieldResolver("uuid", "type"))
.UseSimplifiedLuceneQueryParser()
.Build();

IJsonIndexWriter writer = index.CreateWriter();
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Commit();

IJsonIndexSearcher? searcher = index.CreateSearcher();
int count = searcher.Search("type:CAR").Count();
//int count = searcher.Search(new MatchAllDocsQuery()).Count();
Assert.AreEqual(5, count);
}
[Test]
public async Task SayHello_ReturnsHell2o()
{
IJsonIndex index = new JsonIndexBuilder("myIndex")
.UsingMemmoryStorage()
.WithAnalyzer(cfg => new StandardAnalyzer(cfg.Version, CharArraySet.EMPTY_SET))
.WithFieldResolver(new FieldResolver("uuid", "type"))
.UseSimplifiedLuceneQueryParser()
.Build();

IJsonIndexWriter writer = index.CreateWriter();
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE" }));

writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR" }));

writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT" }));

writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT" }));

writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT" }));
writer.Commit();


IJsonIndexSearcher? searcher = index.CreateSearcher();
//new TermQuery(new Term("type", "AXE"))

//ISearch? search = searcher.Search(new InQuery("type", "car", "foo", "fat"));
ISearch? search = searcher.Search("type IN (car, foo, fat)");
//int count = searcher.Search(new MatchAllDocsQuery()).Count();

foreach (SearchResult result in search.Take(100).Execute())
{
Console.Write(result.Data.ToString(Formatting.None));
}

Assert.That(search.Count(), Is.EqualTo(6));
}
[Test]
public async Task SayHello_ReturnsHell2()
{
IJsonIndex index = new JsonIndexBuilder("myIndex")
.UsingMemmoryStorage()
//.WithAnalyzer(cfg => new StandardAnalyzer(cfg.Version, CharArraySet.EMPTY_SET))
.WithAnalyzer(cfg => new EnglishAnalyzer(cfg.Version, CharArraySet.EMPTY_SET))
.WithFieldResolver(new FieldResolver("uuid", "type"))
.UseSimplifiedLuceneQueryParser()
.Build();

IJsonIndexWriter writer = index.CreateWriter();
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE", name= "Olawale" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE", name= "Wolfhard" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "AXE", name= "Columbo" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR", name= "Malle" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR", name= "LaToya" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAR", name= "Jayanti" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT", name= "Sebastian" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT", name= "Tahlako" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "FAT", name= "Kadriye" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT", name= "Encarnita" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT", name= "Nyarai" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "CAT", name= "Vasudha" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT", name= "Genesio" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT", name= "Aleksander" }));
writer.Create(JObject.FromObject(new { uuid = Guid.NewGuid(), type = "HAT", name= "Timothy" }));
writer.Commit();


IJsonIndexSearcher? searcher = index.CreateSearcher();
//new TermQuery(new Term("type", "AXE"))

//ISearch? search = searcher.Search(new InQuery("type", "car", "foo", "fat"));
//int count = searcher.Search(new MatchAllDocsQuery()).Count()

QueryParser orgParser = new QueryParser(LuceneVersion.LUCENE_48, "type", index.Configuration.Analyzer);
StandardQueryParser stdParser = new StandardQueryParser(index.Configuration.Analyzer);
ILuceneQueryParser? customParser = index.Configuration.Get<ILuceneQueryParser>();


Lucene.Net.Search.Query? query1 = customParser.Parse("name:T*").Query;
query1 = customParser.Parse("name:Test*").Query;
query1 = customParser.Parse("name:Test*Hest").Query;
query1 = customParser.Parse("name:?est*Hes?").Query;
query1 = customParser.Parse("name:?HORSE*HAS?").Query;
query1 = customParser.Parse("name:?HORSES*HAS?").Query;

Lucene.Net.Search.Query? query2 = orgParser.Parse("name:T*");
Lucene.Net.Search.Query? query3 = stdParser.Parse("name:T*", "type");

ISearch? search = searcher.Search("name:T*");
foreach (SearchResult result in search.Take(100).Execute())
{
Console.Write(result.Data.ToString(Formatting.None));
}

Assert.That(search.Count(), Is.EqualTo(2));
}
}
12 changes: 12 additions & 0 deletions src/DotJEM.Json.Index2.QueryParsers/Ast/AndQuery.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using DotJEM.Json.Index2.QueryParsers.Simplified.Parser;

namespace DotJEM.Json.Index2.QueryParsers.Ast;

public class AndQuery : CompositeQuery
{
public AndQuery(BaseQuery[] queries) : base(queries)
{
}

public override TResult Accept<TResult, TContext>(ISimplifiedQueryAstVisitor<TResult, TContext> visitor, TContext context) => visitor.Visit(this, context);
}
Loading

0 comments on commit a3b5e4c

Please sign in to comment.