MikhailFerapontow / yadro-go

Проект с Golang курс | YADRO
1 stars 0 forks source link

feat(searching): add simple search by index #8

Closed MikhailFerapontow closed 4 months ago

MikhailFerapontow commented 4 months ago

@maxan98 @vbelogrudov

Извиняюсь за столь поздни pull request.

1) Xkcd проверяет появились ли новые комиксы и при необходимости обновляет базу данных и индекс 2) Есть флаг -s, который принимает поисковый запрос. По этому поисковому запросу выводится 10 или менее комиксов, наиболее подходящих по ключевым словам.

Каждое слово имеет свой вес. Вес показывает сколько раз слово встречалось в тексте поискового запроса или описания комикса.

3) Создан индексный файл 4) Есть флаг -i, который включает поиск по индексу. 5) Поиск по индексу был реализован очень неэффективно, поэтому серьёзного прироста скорости не наблюдается. Нужно будет исправить в последующем задании.

goos: linux
goarch: amd64
pkg: github.com/MikhailFerapontow/yadro-go/pkg/database
cpu: AMD Ryzen 5 5600X 6-Core Processor             
BenchmarkFind/Short_search_input-12               876772          1796 ns/op
BenchmarkFind/Medium_search_input-12              749169          1726 ns/op
BenchmarkFind/Very_long_search_input-12           728403          1727 ns/op
BenchmarkFindByIndex/Short_search_input-12        557924          1820 ns/op
BenchmarkFindByIndex/Medium_search_input-12       686845          1751 ns/op
BenchmarkFindByIndex/Very_long_search_input-12            803724          1784 ns/op
PASS
ok      github.com/MikhailFerapontow/yadro-go/pkg/database  8.586s
MikhailFerapontow commented 4 months ago

Фраза 'apple for doctor' у меня искалась без всяких изменений. Ключевые слова appl и doctor присутствовали в комиксах.

2024/04/23 18:12:30 Start search
[{doctor 1} {appl 1}]
Found 10 comics:
1. https://imgs.xkcd.com/comics/bracket.png
2. https://imgs.xkcd.com/comics/birth.png
3. https://imgs.xkcd.com/comics/gut_fauna.png
4. https://imgs.xkcd.com/comics/frankenstein.png
5. https://imgs.xkcd.com/comics/the_man_who_fell_sideways.png
6. https://imgs.xkcd.com/comics/incision.png
7. https://imgs.xkcd.com/comics/pain_rating.png
8. https://imgs.xkcd.com/comics/t_cells.png
9. https://imgs.xkcd.com/comics/delivery.png
10. https://imgs.xkcd.com/comics/keynote.png

Для 'mines, captcha' ситуация сложнее. Скорее всего stemming убирает слово mines как стоп слово. А слово captcha не присутствовало в trancript и alt тексте комиксов. Я добавил к обрабатываемому тексту поля title и safe_title, чтобы повысить значимость слов вынесенных в название комикса.

Тем самым получилось искать по 'mines, captcha':

Found 5 comics:
1. https://imgs.xkcd.com/comics/a_new_captcha_approach.png
2. https://imgs.xkcd.com/comics/machine_learning_captcha.png
3. https://imgs.xkcd.com/comics/allow_captcha.png
4. https://imgs.xkcd.com/comics/mine_captcha.png
5. https://imgs.xkcd.com/comics/frankenstein_captcha.png