QueryParser Rules | Java.net
Some interesting features of the
Read full article from QueryParser Rules | Java.net
Using QueryParser
Using
QueryParser is quite straightforward. Three things are needed: an expression, the default field name to use for unqualified fields in the expression, and an analyzer to pieces of the expression.Query query = QueryParser.parse(humanQuery, "contents", new StandardAnalyzer());
When a human-readable query is parsed by Lucene's QueryParser, it is converted to a single concrete subclass of the Query class.Some interesting features of the
Query classes are their toString methods. Each Query subclass generates the equivalent (though not necessarily textually exact) QueryParserexpression. There are two variants: one is the standard Object.toString overridden method, and the other accepts the default field name. Query query = QueryParser.parse("java AND net NOT dot", "contents", new StandardAnalyzer());
assertEquals("+java +net -dot", query.toString("contents"));
assertEquals("+contents:java +contents:net -contents:dot", query.toString());
Beyond constructing the different query types, other syntax is needed to group expressions, select a field, or escape characters.QueryParser cannot create every type of query that can be constructed using the API. For instance, a PhrasePrefixQuery cannot be constructed. You must keep in mind that all of the possibilities available when exposing freeform query parsing to an end user. Some queries have the potential for performance bottlenecks. The syntax used by the built-in QueryParser may not be suitable for your needs. Some control is possible with subclassing QueryParser, though it is still limited.
Creating a custom query parser is well within reach. Look to JavaCC or other parser technologies, such as ANTLR, for creating your own, should
QueryParser be insufficient
No comments:
Post a Comment