"Быстрое внедрение Sphinx на примере проекта...

22
Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник КОВАЛЁВ АНТОН / РУКОВОДИТЕЛЬ ОТДЕЛА РАЗРАБОТКИ НЕТОЛОГИИ-ГРУПП

Transcript of "Быстрое внедрение Sphinx на примере проекта...

Page 1: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Быстрое внедрение Sphinx на примере проектаФоксфорд.Учебник

КОВАЛЁВ АНТОН / РУКОВОДИТЕЛЬ ОТДЕЛА РАЗРАБОТКИ НЕТОЛОГИИ-ГРУПП

Page 2: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Фоксфорд.Учебник - foxford.ru/wiki

Page 3: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Фоксфорд.Учебник - foxford.ru/wiki

Page 4: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Статистика

Преподавателей и методистов

Опубликованных тем

Блоков теории КБ информации

226 1800 3750 20 000

Page 5: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

КАКОЙ НУЖЕН ПОИСК?

С автокомплитом С контекстом поиска

Подстраивающийся под пользователя

Page 6: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

СХЕМА ДАННЫХTheme

name

Blockcontent

Gradeindex

Page 7: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

КАК СДЕЛАТЬ ПОИСК

• gem 'thinking-sphinx'

• Создать индекс

• Сделать запрос

• Получить коллекцию объектов

Page 8: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Простой поиск по темам

ThinkingSphinx::Index.define :theme, name: 'theme_full', with: :active_record do

indexes :name

indexes theme_blocks.block.content, as: :content

End

...

def self.full_text_search(query = '', options = {})

ThinkingSphinx::Search.new query, options

end

@themes = Theme.full_text_search(escaped_query, search_options)

Page 9: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

УЛУЧШАЕМ КАЧЕСТВО

min_prefix_len: 2 expand_keywords: 1

index_exact_words: 1min_word_len: 3

#

#

#

#

charset_table#

expand_keywords: 1#

morphology: lemmatize_ru#

Page 10: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

def search_options

{

indices: ['theme_full_core'],

select: "*, (IN(grade_ids, #{ grade_id }) OR NOT any_grade_ids) AS grade_match",

with: { grade_match: true },

}

end

join grades

has theme_grades.grade.id, as: :grade_ids

has "COUNT(DISTINCT theme_grades.id) > 0", as: :any_grade_ids, type: :boolean

Искать темы определенного класса

Page 11: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

АВТОКОМПЛИТ

• Должен дополнять хорошие слова

• Не должен дополнять нехорошие слова

• Должен предлагать в первую очередь чаще

встречающиеся слова

Page 12: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Формирование частотного словаря

$ indexer myindex --buildstops keywords.txt 20000 --buildfreqs

имеет 550называется 544через 537права 523поэтому 520…

Page 13: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Поиск для автокомплита

ThinkingSphinx::Index.define :keyword, name: 'keyword', with: :active_record do

indexes :word, sortable: true

indexes :frequency, sortable: true

end

@themes = Theme.full_text_search(escaped_query, search_options)

convert_keywords_to_responses

Page 14: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Фоксфорд.Учебник - foxford.ru/wiki

Page 15: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Сниппеты

Page 16: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Контент статьи

"<div class=\"info_element\">\r\n<div class=\"info_header\"

>Определение</div>\r\n<div class=\"info_content\"

>\r\n<p><span><strong>Параллельным переносом на вектор $\\vec{a}$

</strong>называется движение, переводящее каждую точку&nbsp;$M$ в точку

$M_1$, такую что </span><span>$\\overrightarrow{MM_1} = \\vec{a}$.

</span></p>\r\n</div>\r\n</div>"

Page 17: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Как добавить сниппеты

@themes.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane

excerpts: {

before_match: '<b>',

after_match: '</b>',

chunk_separator: ' &#8230; '

}

Page 18: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

НАСТРОЙКИ СНИППЕТОВ

• before_match, after_match, around, phrase_boundary, weight_order, query_mode, force_all_words, limit_passages, limit_words, html_strip_mode, passage_boundary

Page 19: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Пример хорошего сниппета

Пример не очень хорошего сниппета

Page 20: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

Фоксфорд.Учебник - foxford.ru/wiki

Page 21: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

АНТОН КОВАЛЁВ

Спасибо за внимание!

[email protected] facebook.com/antonkvlv

Page 22: "Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв (Нетология-групп)

ПравкиДобавить цифры и статистикуУпростить инфу проУточнить сравнение с эластикомПереименовать улучшаем релевантностьДобавить слайд с выгрузкой слов для автокомплитаДобавить инфу про иДобавить шутокДобавить инфу про автокомплит по фразам