class Blacklight::Solr::Response::Spelling::Base
Attributes
response[R]
Public Class Methods
new(response)
click to toggle source
# File lib/blacklight/solr/response/spelling.rb, line 15 def initialize(response) @response = response end
Public Instance Methods
collation()
click to toggle source
# File lib/blacklight/solr/response/spelling.rb, line 71 def collation # FIXME: DRY up with words spellcheck = response[:spellcheck] return unless spellcheck && spellcheck[:suggestions] suggestions = spellcheck[:suggestions] if suggestions.is_a?(Array) && suggestions.index("collation") # solr < 5 response suggestions[suggestions.index("collation") + 1] elsif spellcheck.key?("collations") # solr 5+ response spellcheck['collations'].last if spellcheck.key?("collations") end end
words()
click to toggle source
returns an array of spelling suggestion for specific query words, as provided in the solr response. Only includes words with higher frequency of occurrence than word in original query. can’t do a full query suggestion because we only get info for each word; combination of words may not have results. Thanks to Naomi Dushay!
# File lib/blacklight/solr/response/spelling.rb, line 25 def words @words ||= begin word_suggestions = [] spellcheck = response[:spellcheck] if spellcheck && spellcheck[:suggestions] suggestions = spellcheck[:suggestions] unless suggestions.nil? if suggestions.is_a?(Array) # Before solr 6.5 suggestions is an array with the following format: # (query term) # (hash of term info and term suggestion) # ... # (query term) # (hash of term info and term suggestion) # 'correctlySpelled' # true/false # collation # (suggestion for collation) # We turn it into a hash here so that it is the same format as in solr 6.5 and later suggestions = Hash[*suggestions].except('correctlySpelled', 'collation') end suggestions.each_value do |term_info| # term_info is a hash: # numFound => # startOffset => # endOffset => # origFreq => # suggestion => [{ frequency =>, word => }] # for extended results # suggestion => ['word'] # for non-extended results orig_freq = term_info['origFreq'] if term_info['suggestion'].first.is_a?(Hash) word_suggestions << term_info['suggestion'].map do |suggestion| suggestion['word'] if suggestion['freq'] > orig_freq end else # only extended suggestions have frequency so we just return all suggestions word_suggestions << term_info['suggestion'] end end end end word_suggestions.flatten.compact.uniq end end