Note: Plunk has been renamed to Peruse
Peruse
Human-friendly query language for Elasticsearch
About
Peruse is a ruby gem to take a human-friendly, one-line search command and
translate it to full-fledged JSON to send to Elasticsearch. Currently it only
supports a few commands, but the goal is to support a large subset of what
Elasticsearch offers.
Installation
gem install peruse
Peruse uses Parslet to first parse your
query, and then Elasticsearch's official ruby library
to send it to Elasticsearch.
Usage
require 'peruse'
Peruse.configure do |config|
config.elasticsearch_options = { host: 'localhost' }
end
Peruse.search 'last 1w AND _type = syslog'
Peruse.search 'window -2d to -1d'
Peruse.search 'window "last monday" to "last thursday"'
Peruse.search 'window 3/14/12 to 3/15/12'
Peruse.search 'http.header = "UserAgent: Mozilla/5.0"'
Peruse.search '(last 1h AND severity = 5) OR (last 1w AND severity = 3)'
Peruse.search '(last 1h and severity = 5) or (last 1w and severity = 3)'
Peruse.search '(last 1h & severity = 5) | (last 1w & severity = 3)'
Peruse.search 'NOT message = Error'
Peruse.search 'not message = Error'
Peruse.search '~ message = Error'
Peruse.search 'http.headers = /.*User-Agent: Mozilla.*/ OR http.headers = /.*application\/json.*/'
Translation
Under the hood, Peruse takes your query and translates it to
Elasticsearch-compatible JSON. For example,
last 24h & _type=syslog
gets translated to:
{
"query": {
"filtered": {
"filter": {
"and": [
{
"range": {
"timestamp": {
"gte": "2013-08-23T05:43:13.770Z",
"lte": "2013-08-24T05:43:13.770Z"
}
}
},
{
"query": {
"query_string": {
"query": "_type:syslog"
}
}
}
]
}
}
}
}
In general, commands are combined into a single filter using Elasticsearch's,
and
, or
, and not
filters.