Packages

Streaming API built upon ElasticSearch's percolation.

Current section

Files

Jump to
funnel lib funnel query_search.ex
Raw

lib/funnel/query_search.ex

defmodule Funnel.QuerySearch do
import Poison, only: [decode: 1, encode: 1]
def query(token, search_query) do
query_id = search_query[:query_id] || "*"
from = search_query[:from] || 0
size = search_query[:size] || 50
'{"query": {"bool": {"must": [{"query_string": {"default_field": "_id","query": "#{token}-#{query_id}"}}]}},"from": #{from},"size": #{size}}'
end
def response(http) do
{:ok, body} = decode http.body
{:ok, body} = Enum.reduce(body["hits"]["hits"] || [], [], &collect_query/2)
|> encode
{http.status_code, body}
end
defp collect_query(query, acc) do
[serialize_query(query) | acc]
end
defp serialize_query(query) do
%{
query_id: extract_query_id(query),
index_id: extract_index_id(query),
score: query["_score"]
}
end
defp extract_index_id(query) do
String.split(query["_index"], "_")
|> List.first
end
defp extract_query_id(query) do
String.split(query["_id"], "-")
|> List.last
end
end