Мне нужно найти частичное совпадение в инвертированном индексе, следующий код работает для точных совпадений, но не для частичного. Переработал это из примера в http://rosettacode.org/wiki/Inverted_Index (который больше не работает в Ruby1.9.3)Ruby: поиск частичного совпадения в инвертированном индексе
Как это сделать наиболее эффективным способом, пожалуйста? Пожалуйста, не советую использовать Lucene, Sphinx и т. Д., Если вы не знаете легкое, простое и чистое решение Ruby, захотите сделать это сами.
@data = {"contents"=>["1.txt", "2.txt"], "of"=>["1.txt", "2.txt"], "file"=>["1.txt", "2.txt"], "one"=>["1.txt"], "two"=>["2.txt"]}
def search words
result = []
words.each do |word|
result << @data[word] if @data[word] #should do a partial match
end
result
end
p search ['of'] #=> [["1.txt", "2.txt"]]
p search ['one'] #=> [["1.txt"]]
p search ['on'] #=> [] <<should become [["1.txt"]]
вы можете легко работать с O (1) алгоритм (во времени) для каждого слова, если вы не заботиться о космосе; просто создайте хэш со всеми подстроками в виде ключей с соответствующим значением. – tokland