Ask HN: Is there a search engine which understands regular expressions?
Are there any general purpose search engines which allow searches to be made using regular expressions?
I know http://www.google.com/codesearch allows them, but it's a special purpose search engine for searching through source code. I'm looking for a general purpose search engine, like Google/Bing, that can search through all the usual document types using regexes.
20 comments
[ 2.9 ms ] story [ 49.6 ms ] threadThose are just predefined custom searches, a feature built in to Opera (my browser of choice), and probably other browsers as well.
Unfortunately, custom searches are still limited to using whatever syntax the search engines they query use, so if that search engine does not support regexes, using a custom search (or "bang search") won't help.
They can still be a valuable search tool, but not what I'm looking for.
It may not be efficient for larger datasets and large numbers of users, but that need not be a problem for the search engine owners, as they could just take their sweet time in returning results.
Also, if you let a user search for any regex, it would be really easy to overload the server, by entering very complex regexes.
I'm not sure that allowing regexes would put an undue burden on the search engines. But if it ever becomes an issue, the search engine could easily deal with the problem by simply slowing down the search if it contains a regex.
I'd happily wait 2x, 5x, or even 10x as long for my query to complete if I could use a regex. For some important queries for which non-regex searches are inadequate, I'd even be willing to wait hours or days, since the alternative would be not being able to perform the search at all (or returning so many false positives as to be useless).
You say you would be happy to wait days for a result, but what incentive would Google have to run long-running regex processing tasks, without showing you any ads or gathering any useful info in the process?
I wish it would happen, but I can't see any incentive for the big players in search to do it at the moment. Like you say, so few people would use it.
Would it really? I'd like to see some hard data on that.
"what incentive would Google have to run long-running regex processing tasks, without showing you any ads or gathering any useful info in the process?"
What incentive does Google have for allowing regexes to be used in searches of source code, which it already does?
It's useful, and it gets Google goodwill from its users. Plus, many of its own employees probably benefit from it.
The number of users of Google's regex code search feature is probably no greater than the number of people who'd use regexes in general search, perhaps even smaller.
As far as ads go, I'd bet the vast majority of people who use Google's code search engine run ad blockers and don't see any ads anyway. I very much doubt that Google gets much if any profit from running it. And yet they do it.
The process would be this:
-> User submits Regex
-> Google fetches all documents in it's database (46 billion documents according to mryan) - If we assume 1kb of data per document (wich is probably way to small), google just fetched 43869 GigaByte of data
-> now google somehow iterates over said 43869Gb (we assume we have a lot of RAM btw.) and check if the regex matches any of them
-> Search results are delivered to user (days later?)
I can not give you any "hard facts", but the problem is that if you can not build an index, you have to look at each individual document. And in google's case the amount of documents is just way too high.
To run a regular expression, you have to search through the entire corpus.
Right now, when you type a search in, it searches through its index to look only through the top documents that match those words.
My guess is that it would be more like 1000000x slower.
I even guess that, if someone actually built an engine that handled all regular expressions and found out a way to handle DDOS attacks, people would complain that they want more (no, you cannot parse HTML with regular expressions)
The fact is though, that searching a body of text with an arbitrary regular expression is an O(n) operation. And with the entire Web, O(n) is infeasible to do for every search. And it is O(n) only if you mean regular expression in the narrow technical sense. I believe that the best current algorithms for extended regular expressions (e.g. the ones in Perl) which support features like back-references are exponential in the worst case.
Standard search works because any search will contain words that decrease the target space by several orders of magnitude (and of it does not, nobody Will notice if the search engine returns almost-random documents)
For the regexes that people would want to search with, decreasing the search space is infeasible. So, you would, effectively, have to grep large parts of the Internet. Even at Google, that would take serious time. It also would be expensive.
It is possible to limit the regex space and get reasonable run times, for example by requiring the regex to contain sufficiently infrequent character sequences with \w boundary delimiters. However, I expect any such limited set would be equally well served by a Google search followed by a client-side grep.
If you disagree, I would be interested in what regexes you would allow and how you would implement searching fotpr them.
Example: putting the following into the Google search box:
Finds any page with foo, bar and baz, even thought I tried to tell it that the asterisk and arrow were important.https://encrypted.google.com/search?hl=en&q=%22*foo%22+%...
For example I was searching for Groupon info in a particular market and google returns me results that mention "group" but doesn't tell me that it's doing so. Really, really annoying to find barely any of the returned results contain or relate to the word that you're searching.
I tried quoting groupon but this doesn't work you have to negate the search thusly: 'groupon -"group on"'. Why don't they give you the option to remove their guessed results (like "did you mean") or simply limit related/thematic results to those using the ~ modifier. Grrr.
It's a mess.
Since parsing regular expressions is so slow compared with performing an indexed search, it's difficult to think of a way to make that scale for a dataset as large as the public web. There's also the problem of having to protect against regex denial of service attacks: http://en.m.wikipedia.org/wiki/ReDoS
I've been able to (very partially) make up for the lack of regex support by taking advantage of Google's operators and wildcards:
http://www.googleguide.com/wildcard_operator.html
http://www.googleguide.com/advanced_operators.html
Some examples:
This is hardly a replacement for regex, but it's the best I've been able to come up with.Before I adopted Google I used Teoma, AllTheWeb, Magellan/Excite and probably some others so it was possibly one of them? Anyone recall such a thing?
Edit: Looks like http://www.searchlores.org/main.htm#exalead (Exalead, private beta) is doing regular expression search.