Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

incorrect result in fulltext search #5

Open
andrey-vyatkin opened this issue Apr 15, 2016 · 4 comments
Open

incorrect result in fulltext search #5

andrey-vyatkin opened this issue Apr 15, 2016 · 4 comments
Assignees

Comments

@andrey-vyatkin
Copy link

andrey-vyatkin commented Apr 15, 2016

ruby 2.0.0, triez 1.0.4

trie = Triez.new(value_type: :object, default: nil)
corpus = ["секс и ничего лишнего", "секса много не бывает", "стив роджерс становится секс-символом америки (2014-07-30 16:20:33)", "люсия и секс", "поговорим о сексе", "секс-файлы: там, где исполняются желания", "время сексуального освобождения", "секс-файлы: мистер икс", "камасутра – самые соблазнительные сексуальные позиции (видео)", "секс, наркотики и рок-н-ролл", "секс и дзен", "секс ангелов", "секс-файлы: обольщение души (соблазнение души)", "секс-файлы: там, где исполняются желания (мир наслаждений)", "секс-файлы: неприкаянные души", "секс и ярость", "секс-файлы: двойная жизнь", "видеогид для влюбленных (камасутра – самые соблазнительные сексуальные позиции)", "дао секса и любви (восточные секреты секса и любви). серия 1", "дао секса и любви (восточные секреты секса и любви). серия 2", "дао секса и любви (восточные секреты секса и любви). серия 3", "дао секса и любви (восточные секреты секса и любви). серия 4", "дао секса и любви (восточные секреты секса и любви). серия 5", "дао секса и любви (восточные секреты секса и любви). серия 6", "дао секса и любви (восточные секреты секса и любви). серия 7", "дао секса и любви (восточные секреты секса и любви). серия 8", "дао секса и любви (восточные секреты секса и любви). серия 9", "дао секса и любви (восточные секреты секса и любви). серия 10", "дао секса и любви (восточные секреты секса и любви). серия 11", "дао секса и любви (восточные секреты секса и любви). серия 12", "дао секса и любви (восточные секреты секса и любви). серия 13", "дао секса и любви (восточные секреты секса и любви). серия 14", "дао секса и любви (восточные секреты секса и любви). серия 15", "дао секса и любви (восточные секреты секса и любви). серия 16", "сексуальные хроники французской семьи", "всё, что вы хотели знать о сексе и налогах", "секс-файлы: виртуальный секс", "секс-файлы: внеземная эротика (эротика пришельцев)", "камасутра в трех измерениях: искусство любви (все, что вы хотите знать о сексе)", "камасутра в трех измерениях: руководство по сексуальным фантазиям (путеводитель в мир сексуальных фантазий)", "видеогид для наслаждения (камасутра – самые соблазнительные сексуальные позиции)", "с начала года выявлено 150 преступлений, связанных с сексуальным насилием над детьми", "больше чем секс", "вслед за германией финляндию захлестнула волна сексуальных преступлений", "в кельне разгорается новый сексуальный скандал", "\"психологии навынос\": почему первый танец с человеком должен быть раньше первого секса с ним.", "секс до и после родов. павел зыгмантович в \"психологии навынос\" ответил на актуальные вопросы.", "\"не бит, не крашен\". е класс: удобно ли в нем заниматься сексом, возить цемент и ездить на шашлыки.", "совет безопасности оон принял резолюцию по борьбе с сексуальным насилием ", "сексуальное настроение", "неудовлетворенное сексуальное напряжение", "полная история моих сексуальных поражений", "секс и 101 смерть", "секс по обмену", "любовь и секс на ибице"]
corpus.each_with_index { |str, id| trie.change_all(:suffix, str) { str } }
str = 'секс'
corpus.select { |str| str.include?(str) } - trie.search_with_prefix(str).map { |_, id| id }.uniq

each word in corpus contains str string, but only 53 out of 55 results are returned during prefix search

@luikore
Copy link
Owner

luikore commented Apr 21, 2016

_< I'll investigate this weekend

@luikore
Copy link
Owner

luikore commented Apr 24, 2016

Hi, @dewshick

It works as expected, since your change_all may overwrite previous inserted values so it returns less than 55 results.

To avoid loss in update, you can, for example, store all values in an array:

corpus.each_with_index { |str, id| trie.change_all(:suffix, str) {|arr| arr ||= []; arr << str } }

trie.search_with_prefix(str).flat_map{|_, ids| ids}.uniq.size #=> 55

@andrey-vyatkin
Copy link
Author

andrey-vyatkin commented Apr 26, 2016

@luikore Great! Thanks for info!
The code was adopted (without thinking too much, my fault) from fulltext search example, maybe it'll be reasonable to write the full text search example same way?

@luikore
Copy link
Owner

luikore commented Apr 28, 2016

@dewshick good point, I will change the example

@luikore luikore self-assigned this Apr 28, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants