Commit 1234fda07136715c03b9874896ee426eb3f9072f

Authored by Andrew Kane
1 parent ea3d385f

Added default_fields option

CHANGELOG.md
  1 +## 1.5.1 [unreleased]
  2 +
  3 +- Added `default_fields` option
  4 +
1 5 ## 1.5.0
2 6  
3 7 - Added support for geo shape indexing and queries
... ...
README.md
... ... @@ -952,26 +952,6 @@ Containing the query shape (Elasticsearch 2.2+)
952 952 City.search "san", where: {bounds: {geo_shape: {type: "envelope", relation: "contains", coordinates: [{lat: 38, lon: -123}, {lat: 37, lon: -122}]}}}
953 953 ```
954 954  
955   -### Routing
956   -
957   -Searchkick supports [Elasticsearch’s routing feature](https://www.elastic.co/blog/customizing-your-document-routing).
958   -
959   -```ruby
960   -class Business < ActiveRecord::Base
961   - searchkick routing: true
962   -
963   - def search_routing
964   - city_id
965   - end
966   -end
967   -```
968   -
969   -Reindex and search with:
970   -
971   -```ruby
972   -Business.search "ice cream", routing: params[:city_id]
973   -```
974   -
975 955 ## Inheritance
976 956  
977 957 Searchkick supports single table inheritance.
... ... @@ -1121,7 +1101,33 @@ Then deploy and reindex:
1121 1101 rake searchkick:reindex CLASS=Product
1122 1102 ```
1123 1103  
1124   -### Performance
  1104 +### Automatic Failover
  1105 +
  1106 +Create an initializer `config/initializers/elasticsearch.rb` with multiple hosts:
  1107 +
  1108 +```ruby
  1109 +Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200", "localhost:9201"], retry_on_failure: true)
  1110 +```
  1111 +
  1112 +See [elasticsearch-transport](https://github.com/elastic/elasticsearch-ruby/blob/master/elasticsearch-transport) for a complete list of options.
  1113 +
  1114 +### Lograge
  1115 +
  1116 +Add the following to `config/environments/production.rb`:
  1117 +
  1118 +```ruby
  1119 +config.lograge.custom_options = lambda do |event|
  1120 + options = {}
  1121 + options[:search] = event.payload[:searchkick_runtime] if event.payload[:searchkick_runtime].to_f > 0
  1122 + options
  1123 +end
  1124 +```
  1125 +
  1126 +See [Production Rails](https://github.com/ankane/production_rails) for other good practices.
  1127 +
  1128 +## Performance
  1129 +
  1130 +### Persistent HTTP Connections
1125 1131  
1126 1132 For the best performance, add [Typhoeus](https://github.com/typhoeus/typhoeus) to your Gemfile.
1127 1133  
... ... @@ -1137,29 +1143,35 @@ Ethon.logger = Logger.new(&quot;/dev/null&quot;)
1137 1143  
1138 1144 If you run into issues on Windows, check out [this post](https://www.rastating.com/fixing-issues-in-typhoeus-and-httparty-on-windows/).
1139 1145  
1140   -### Automatic Failover
  1146 +### _all Field [master]
1141 1147  
1142   -Create an initializer `config/initializers/elasticsearch.rb` with multiple hosts:
  1148 +Disable the `_all` field by specifying default fields to search.
1143 1149  
1144 1150 ```ruby
1145   -Searchkick.client = Elasticsearch::Client.new(hosts: ["localhost:9200", "localhost:9201"], retry_on_failure: true)
  1151 +class Product < ActiveRecord::Base
  1152 + searchkick default_fields: [:name]
  1153 +end
1146 1154 ```
1147 1155  
1148   -See [elasticsearch-transport](https://github.com/elastic/elasticsearch-ruby/blob/master/elasticsearch-transport) for a complete list of options.
1149   -
1150   -### Lograge
  1156 +### Routing
1151 1157  
1152   -Add the following to `config/environments/production.rb`:
  1158 +Searchkick supports [Elasticsearch’s routing feature](https://www.elastic.co/blog/customizing-your-document-routing).
1153 1159  
1154 1160 ```ruby
1155   -config.lograge.custom_options = lambda do |event|
1156   - options = {}
1157   - options[:search] = event.payload[:searchkick_runtime] if event.payload[:searchkick_runtime].to_f > 0
1158   - options
  1161 +class Business < ActiveRecord::Base
  1162 + searchkick routing: true
  1163 +
  1164 + def search_routing
  1165 + city_id
  1166 + end
1159 1167 end
1160 1168 ```
1161 1169  
1162   -See [Production Rails](https://github.com/ankane/production_rails) for other good practices.
  1170 +Reindex and search with:
  1171 +
  1172 +```ruby
  1173 +Business.search "ice cream", routing: params[:city_id]
  1174 +```
1163 1175  
1164 1176 ## Advanced
1165 1177  
... ...
lib/searchkick/index_options.rb
... ... @@ -338,7 +338,7 @@ module Searchkick
338 338  
339 339 mappings = {
340 340 _default_: {
341   - _all: {type: default_type, index: "analyzed", analyzer: default_analyzer},
  341 + _all: options[:default_fields] ? {enabled: false} : {type: default_type, index: "analyzed", analyzer: default_analyzer},
342 342 properties: mapping,
343 343 _routing: routing,
344 344 # https://gist.github.com/kimchy/2898285
... ...
lib/searchkick/query.rb
... ... @@ -479,7 +479,7 @@ module Searchkick
479 479  
480 480 def set_fields
481 481 boost_fields = {}
482   - fields = options[:fields] || searchkick_options[:searchable]
  482 + fields = options[:fields] || searchkick_options[:default_fields] || searchkick_options[:searchable]
483 483 fields =
484 484 if fields
485 485 if options[:autocomplete]
... ...
test/boost_test.rb
... ... @@ -164,6 +164,6 @@ class BoostTest &lt; Minitest::Test
164 164 store_names ["Rex"], Animal
165 165 store_names ["Rexx"], Product
166 166  
167   - assert_order "Rex", ["Rexx", "Rex"], {index_name: [Animal, Product], indices_boost: {Animal => 1, Product => 200}}, Store
  167 + assert_order "Rex", ["Rexx", "Rex"], {index_name: [Animal, Product], indices_boost: {Animal => 1, Product => 200}, fields: [:name]}, Store
168 168 end
169 169 end
... ...
test/test_helper.rb
... ... @@ -317,6 +317,7 @@ class Product
317 317 word_end: [:name],
318 318 highlight: [:name],
319 319 searchable: [:name, :color],
  320 + default_fields: [:name, :color],
320 321 filterable: [:name, :color, :description],
321 322 # unsearchable: [:description],
322 323 # only_analyzed: [:alt_description],
... ...