環境: Elasticsearch 1.7.3, elasticsearch-rails 0.1.8
ドキュメントごとにフィールドがどうanalyzeされて格納するかを管理画面に表示したいのだけど、そういう便利APIはないみたい。
そこでmappingの設定を読んで一つ一つ _analyze
するユーティリティを定義することにした。 ついでに _source
も表示することにした。
module Searchable included do include Elasticsearch::Model # ... def es_perform_request(method, path, params, body = nil) es = self.class.__elasticsearch__.client es.perform_request(method, "#{self.class.index_name}/#{path}", params, body).body end def es_source es_perform_request(:get, "#{model.document_type}/#{id}/_source", {}) rescue => e Rails.logger.error(e) {} end # to show how Elasticsearch analyzer works for each field def es_analyzed analyzed = {} source = as_indexed_json model = self.class mapping = model.mapping.to_hash[model.mapping.type.to_sym] mapping[:properties].each do |name, setting| next unless setting[:analyzer] result = es_perform_request(:get, '_analyze', analyzer: setting[:analyzer], text: source[name]) analyzed[name] = result['tokens'].map { |item| item['token'] } end analyzed rescue => e Rails.logger.error(e) {} end end