jekyll_search 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e903bb117234165daca55baee25cc4a352e5cd91
4
- data.tar.gz: db9eb1cf7534ec9929057194af1e0248b52dc243
3
+ metadata.gz: 93f638b21ff6bac656f0b96a2fb8976fec06b956
4
+ data.tar.gz: 83ed6b3e6770ad95b9525e73832c17be3098e650
5
5
  SHA512:
6
- metadata.gz: 7e6f6263cb8391612c44c4f81b1cb24285f9bdf68b910ae3f2bbe6f2d71eccede16a95cf61648b3e576fc3368766caaf7fe70706a75277e2d2ca2b72486a200d
7
- data.tar.gz: 84529eaef4b0b389bb13bfb1d11ed6ad3bd22e997bef30c59eef4ff18c4706d593ae04f28934939cc568d5c22e6716b6d9abe6244db9b2049f795560187b0d31
6
+ metadata.gz: 8e78345248b71e96def1cf31dd344fba3f70b62c9d14ccc3e45244bd36e04abd25dc03ff6195aee41e3bb55674c6a185259704013c8cd39b5b715be48a3f5f39
7
+ data.tar.gz: 10d31a2a55029a583ce597dc4ba30c4b53d0bb3d91dced2db670173d10b32d796936af3979bef62ba2a110921679f59fb7d199eff0ea663ab47cf6173e8a8bb8
data/README.md CHANGED
@@ -42,10 +42,59 @@ search:
42
42
  ```
43
43
 
44
44
  Now run `jekyll index` to iterate over all pages and index them with Elasticsearch. With `jekyll search my query`
45
- you can throw some test searches against your freshly created search index.
45
+ you can throw some test searches against your freshly created search index. When you plan to integrate a AJAX
46
+ based search into your Jekyll page, then the following `curl` example should help to get started (see also [here][elasticsearch-searchapi]):
47
+
48
+ ```text
49
+ curl -XPOST localhost:9200/myindex/section/_search?pretty -d '{
50
+ "query": {
51
+ "match_phrase_prefix": {
52
+ "content": {
53
+ "query": "I SEARCH FOR SOMETHING",
54
+ "slop": 10
55
+ }
56
+ }
57
+ },
58
+ "highlight": {
59
+ "fields": {
60
+ "content": {}
61
+ }
62
+ }
63
+ }'
64
+ ```
65
+
66
+ ```json
67
+ {
68
+ // ...
69
+ "hits": {
70
+ "total": 7,
71
+ "max_score": 0.61569,
72
+ "hits": [
73
+ {
74
+ // ...
75
+ "_score" : 0.61569,
76
+ "_source": {
77
+ "url": "/link-to-page.html#headline-id",
78
+ "title": "The title",
79
+ "content": "The content"
80
+ },
81
+ "highlight": {
82
+ "content": [
83
+ "Some <em>highlighted</em> stuff"
84
+ ]
85
+ }
86
+ }
87
+ // ...
88
+ ]
89
+ }
90
+ // ...
91
+ }
92
+ ```
93
+
94
+ ## Customize search index
46
95
 
47
96
  If you want to customize how Elasticsearch creates the search index, then provide an additional `index.settings`
48
- property in your `_config.yml` (see [here][elasticsearch-createindex]:
97
+ property in your `_config.yml` (see also [here][elasticsearch-createindex]):
49
98
 
50
99
  ```yaml
51
100
  # Search index settings
@@ -66,6 +115,17 @@ search:
66
115
  content:
67
116
  type: string
68
117
  analyzer: english
118
+ section:
119
+ properties:
120
+ url:
121
+ type: string
122
+ analyzer: keyword
123
+ title:
124
+ type: string
125
+ analyzer: english
126
+ content:
127
+ type: string
128
+ analyzer: english
69
129
  ```
70
130
 
71
131
  ## Contributing
@@ -77,4 +137,5 @@ search:
77
137
  5. Create a new Pull Request
78
138
 
79
139
  [elasticsearch]: http://www.elasticsearch.org/
140
+ [elasticsearch-searchapi]: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-search.html
80
141
  [elasticsearch-createindex]: http://www.rubydoc.info/gems/elasticsearch-api/Elasticsearch/API/Indices/Actions#create-instance_method
@@ -1,3 +1,3 @@
1
1
  module JekyllSearch
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/jekyll_search.rb CHANGED
@@ -31,23 +31,22 @@ module Jekyll
31
31
  client = Elasticsearch::Client.new host: settings['host'], log: false
32
32
  create_index(client, settings)
33
33
 
34
- pages = site.pages.
35
- select { |p| p.url =~ /\.html$/ }.
36
- select { |p| p.data['searchable'].nil? or p.data['searchable'] != false }
34
+ pages = collect_content(site, site.pages)
35
+ posts = collect_content(site, site.posts)
37
36
 
38
- for page in pages
37
+ for page in pages + posts
39
38
  page_body = {
40
- url: site.baseurl + page.url,
41
- title: page.data['title'],
42
- content: JekyllSearch::HtmlProcessor.strip_html(page.content)
39
+ url: page[:url],
40
+ title: page[:title],
41
+ content: JekyllSearch::HtmlProcessor.strip_html(page[:content])
43
42
  }
44
43
 
45
44
  client.index index: settings['index']['name'], type: 'page', body: page_body
46
45
 
47
- for section in JekyllSearch::HtmlProcessor.detect_sections(page.content)
46
+ for section in JekyllSearch::HtmlProcessor.detect_sections(page[:content])
48
47
  section_body = {
49
- url: if section[:id] != nil then site.baseurl + page.url + '#' + section[:id] else site.baseurl + page.url end,
50
- title: if section[:title] != nil then section[:title] else page.data['title'] end,
48
+ url: if section[:id] != nil then site.baseurl + page[:url] + '#' + section[:id] else site.baseurl + page[:url] end,
49
+ title: if section[:title] != nil then section[:title] else page[:title] end,
51
50
  content: JekyllSearch::HtmlProcessor.strip_html(section[:content])
52
51
  }
53
52
 
@@ -63,6 +62,19 @@ module Jekyll
63
62
 
64
63
  client.indices.create index: settings['index']['name'], body: (settings['index']['settings'] or {})
65
64
  end
65
+
66
+ def collect_content(site, elements)
67
+ elements.
68
+ select { |p| p.url =~ /\.html$/ }.
69
+ select { |p| p.data['searchable'].nil? or p.data['searchable'] != false }.
70
+ map do |p|
71
+ {
72
+ :url => site.baseurl + p.url,
73
+ :title => p.data['title'],
74
+ :content => p.content
75
+ }
76
+ end
77
+ end
66
78
  end
67
79
  end
68
80
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll_search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Hoffmeister