
jira at apache
Nov 19, 2009, 10:44 PM
Post #10 of 131
(1236 views)
Permalink
|
|
[jira] Commented: (LUCENE-1606) Automaton Query/Filter (scalable regex)
[In reply to]
|
|
[ https://issues.apache.org/jira/browse/LUCENE-1606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12780471#action_12780471 ] Robert Muir commented on LUCENE-1606: ------------------------------------- bq. That is a cool tradeoff to be able to make. Mark, yes. I guess someone could implement the DFA-reversing if they wanted to, to enable leading .* regex support with ReverseStringFilter. you can still use this Wildcard impl with ReverseStringFilter just like the core Wildcard impl, because its just so easy to reverse a wildcard string. but you don't want to try to reverse a regular expression! that would be hairy. easier to reverse a DFA. but even without this, there are tons of workarounds, like the tradeoff i mentioned earlier. also, another one that might not be apparent is that its only the leading .* that is a problem, depending on corpus of course. [a-z].*abacadaba will avoid visiting terms that start with 1,2,3 or are in chinese, etc, which might be a nice improvement. of course if all your terms start with a-z, then its gonna be the same as entering .*abacadaba, and be bad. all depends on how selective the regular expression is wrt your terms. > Automaton Query/Filter (scalable regex) > --------------------------------------- > > Key: LUCENE-1606 > URL: https://issues.apache.org/jira/browse/LUCENE-1606 > Project: Lucene - Java > Issue Type: New Feature > Components: contrib/* > Reporter: Robert Muir > Assignee: Robert Muir > Priority: Minor > Fix For: 3.1 > > Attachments: automaton.patch, automatonMultiQuery.patch, automatonmultiqueryfuzzy.patch, automatonMultiQuerySmart.patch, automatonWithWildCard.patch, automatonWithWildCard2.patch, LUCENE-1606.patch, LUCENE-1606.patch > > > Attached is a patch for an AutomatonQuery/Filter (name can change if its not suitable). > Whereas the out-of-box contrib RegexQuery is nice, I have some very large indexes (100M+ unique tokens) where queries are quite slow, 2 minutes, etc. Additionally all of the existing RegexQuery implementations in Lucene are really slow if there is no constant prefix. This implementation does not depend upon constant prefix, and runs the same query in 640ms. > Some use cases I envision: > 1. lexicography/etc on large text corpora > 2. looking for things such as urls where the prefix is not constant (http:// or ftp://) > The Filter uses the BRICS package (http://www.brics.dk/automaton/) to convert regular expressions into a DFA. Then, the filter "enumerates" terms in a special way, by using the underlying state machine. Here is my short description from the comments: > The algorithm here is pretty basic. Enumerate terms but instead of a binary accept/reject do: > > 1. Look at the portion that is OK (did not enter a reject state in the DFA) > 2. Generate the next possible String and seek to that. > the Query simply wraps the filter with ConstantScoreQuery. > I did not include the automaton.jar inside the patch but it can be downloaded from http://www.brics.dk/automaton/ and is BSD-licensed. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscribe [at] lucene For additional commands, e-mail: java-dev-help [at] lucene
|