Details
-
Wish
-
Status: Closed
-
Minor
-
Resolution: Abandoned
-
None
-
None
Description
The Lucene team is using a tool called javacc to generate the main business logic behind the query parsers. If we had a similar tool it could help:
- Speed up the process of porting/upgrading QueryParser
- Reduce the number of bugs in these modules caused by doing it manually
- Most importantly, QueryParser could potentially be generated without using exceptions for control flow
The javacc tool uses a configuration file as input and creates java code as output. Here are some examples of those configuration files:
- https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.8.1/lucene/queryparser/src/java/org/apache/lucene/queryparser/classic/QueryParser.jj
- https://github.com/apache/lucene-solr/blob/releases/lucene-solr/4.8.1/lucene/queryparser/src/java/org/apache/lucene/queryparser/surround/parser/QueryParser.jj
This has not been fully researched, but there are at least 2 potential ways we could approach this:
- Find a similar tool to javacc in .NET that supports similar options that were used in javacc, and create a converter tool to change the javacc configuration into a configuration that the .NET tool supports.
- Do a direct port of javacc to C#, and fix its logic to use a more efficient control flow mechanism than exceptions (perhaps goto would be the most direct replacement).
It seems according to this document that using a port of javacc should be our first choice because of the performance benchmarks of the resultant code. And certainly that would eliminate the risk of having a .NET tool not support an option that we need either now or for some future version of Lucene.