Skip to content

Commit d7b890c

Browse files
Added search endpoint for elasticsearch, updated to return maps
1 parent 95bda41 commit d7b890c

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

test/integration/skill_controller_search_test.exs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ defmodule SkillControllerSearchIntegrationTest do
66
@test_index "skills"
77
@type_value "title"
88

9+
@elixir %{"id" => 1, "description" => "Elixir is an awesome functional language", "title" => "Elixir", "original_row" => 1}
10+
@ruby %{"id" => 2, "description" => "Ruby is an awesome OO language", "title" => "Ruby", "original_row" => 2}
11+
@rails %{"id" => 3, "description" => "Rails is a modern framework", "title" => "Rails", "original_row" => 3}
12+
@css %{"id" => 4, "description" => "CSS is pretty cool too", "title" => "CSS", "original_row" => 4}
13+
@phoenix %{"id" => 5, "description" => "Phoenix is a super framework", "title" => "Phoenix", "original_row" => 5}
14+
915
setup do
1016
ElasticSearchHelper.delete(@test_url, @test_index)
1117
ElasticSearchHelper.create_index(@test_url, @test_index, @type_value)
@@ -15,7 +21,7 @@ defmodule SkillControllerSearchIntegrationTest do
1521

1622
test "search partial word" do
1723
results = ElasticSearchHelper.search(@test_url, @test_index, "title", "ru")
18-
assert results == ["Ruby"]
24+
assert results == [@ruby]
1925
end
2026

2127
test "fuzzy search partial word" do
@@ -25,12 +31,12 @@ defmodule SkillControllerSearchIntegrationTest do
2531

2632
test "search whole word" do
2733
results = ElasticSearchHelper.search(@test_url, @test_index, "title", "css")
28-
assert results == ["CSS"]
34+
assert results == [@css]
2935
end
3036

3137
test "fuzzy search whole word" do
3238
results = ElasticSearchHelper.search(@test_url, @test_index, "title", "csw")
33-
assert results == ["CSS"]
39+
assert results == [@css]
3440
end
3541

3642
test "search no matches" do
@@ -40,10 +46,11 @@ defmodule SkillControllerSearchIntegrationTest do
4046

4147
test "match all entries" do
4248
results = ElasticSearchHelper.match_all(@test_url, @test_index, "title")
43-
assert results -- ["Elixir", "Ruby", "Rails", "CSS"] == []
49+
assert results -- [@elixir, @ruby, @rails, @css] == []
4450
end
4551

4652
def init do
47-
ElasticSearchHelper.add_documents(@test_url, @test_index, @type_value, ["Elixir", "Ruby", "Rails", "CSS"], [refresh: true])
53+
ElasticSearchHelper.add_documents(@test_url, @test_index, @type_value,
54+
[@elixir, @css, @ruby], [refresh: true])
4855
end
4956
end

web/controllers/skill_controller.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ defmodule CodeCorps.SkillController do
99
plug :load_and_authorize_resource, model: Skill, only: [:create]
1010
plug JaResource
1111

12+
@elasticsearch_index "skills"
13+
@elasticsearch_type "title"
14+
@elasticsearch_url Application.get_env(:code_corps, :elasticsearch_url)
15+
1216
def filter(_conn, query, "id", id_list) do
1317
query |> id_filter(id_list)
1418
end
@@ -18,4 +22,9 @@ defmodule CodeCorps.SkillController do
1822
|> title_filter(params)
1923
|> limit_filter(params)
2024
end
25+
26+
def search(_conn, params) do
27+
CodeCorps.ElasticSearchHelper.search(@elasticsearch_url, @elasticsearch_index, @elasticsearch_type, query)
28+
end
29+
2130
end

web/helpers/elastic_search_helper.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule CodeCorps.ElasticSearchHelper do
1717
end
1818

1919
def add_documents(url, index, type, documents, query) when is_list(documents) do
20-
Enum.each(documents, fn(x) -> add_document(url, index, type, %{"#{type}" => x}, query) end)
20+
Enum.each(documents, fn(x) -> add_document(url, index, type, x, query) end)
2121
end
2222

2323
def add_document(url, index, type, data) do
@@ -47,7 +47,7 @@ defmodule CodeCorps.ElasticSearchHelper do
4747
end
4848

4949
def process_response(%HTTPoison.Response{status_code: 200} = response, type) do
50-
response.body["hits"]["hits"] |> Enum.map(fn(x) -> x["_source"][type] end)
50+
response.body["hits"]["hits"] |> Enum.map(fn(x) -> x["_source"] end)
5151
end
5252

5353
def process_response(_), do: []

web/router.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ defmodule CodeCorps.Router do
6868
resources "/roles", RoleController, only: [:create]
6969
resources "/role-skills", RoleSkillController, only: [:create, :delete]
7070
resources "/skills", SkillController, only: [:create]
71+
resources "/skills/search", SkillController, only: [:show]
7172
resources "/stripe-connect-accounts", StripeConnectAccountController, only: [:show, :create, :update]
7273
resources "/stripe-connect-plans", StripeConnectPlanController, only: [:show, :create]
7374
resources "/stripe-connect-subscriptions", StripeConnectSubscriptionController, only: [:show, :create]

0 commit comments

Comments
 (0)