Быстрое развертывание кластера Hadoop на платформе RightScale
"Быстрое внедрение Sphinx на примере проекта...
-
Upload
michael-kluev -
Category
Internet
-
view
71 -
download
6
Transcript of "Быстрое внедрение Sphinx на примере проекта...
Быстрое внедрение Sphinx на примере проектаФоксфорд.Учебник
КОВАЛЁВ АНТОН / РУКОВОДИТЕЛЬ ОТДЕЛА РАЗРАБОТКИ НЕТОЛОГИИ-ГРУПП
Фоксфорд.Учебник - foxford.ru/wiki
Фоксфорд.Учебник - foxford.ru/wiki
Статистика
Преподавателей и методистов
Опубликованных тем
Блоков теории КБ информации
226 1800 3750 20 000
КАКОЙ НУЖЕН ПОИСК?
С автокомплитом С контекстом поиска
Подстраивающийся под пользователя
СХЕМА ДАННЫХTheme
name
Blockcontent
Gradeindex
КАК СДЕЛАТЬ ПОИСК
• gem 'thinking-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)
УЛУЧШАЕМ КАЧЕСТВО
min_prefix_len: 2 expand_keywords: 1
index_exact_words: 1min_word_len: 3
#
#
#
#
charset_table#
expand_keywords: 1#
morphology: lemmatize_ru#
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
Искать темы определенного класса
АВТОКОМПЛИТ
• Должен дополнять хорошие слова
• Не должен дополнять нехорошие слова
• Должен предлагать в первую очередь чаще
встречающиеся слова
Формирование частотного словаря
$ indexer myindex --buildstops keywords.txt 20000 --buildfreqs
…
имеет 550называется 544через 537права 523поэтому 520…
Поиск для автокомплита
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
Фоксфорд.Учебник - foxford.ru/wiki
Сниппеты
Контент статьи
"<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>называется движение, переводящее каждую точку $M$ в точку
$M_1$, такую что </span><span>$\\overrightarrow{MM_1} = \\vec{a}$.
</span></p>\r\n</div>\r\n</div>"
Как добавить сниппеты
@themes.context[:panes] << ThinkingSphinx::Panes::ExcerptsPane
…
excerpts: {
before_match: '<b>',
after_match: '</b>',
chunk_separator: ' … '
}
НАСТРОЙКИ СНИППЕТОВ
• before_match, after_match, around, phrase_boundary, weight_order, query_mode, force_all_words, limit_passages, limit_words, html_strip_mode, passage_boundary
Пример хорошего сниппета
Пример не очень хорошего сниппета
Фоксфорд.Учебник - foxford.ru/wiki
ПравкиДобавить цифры и статистикуУпростить инфу проУточнить сравнение с эластикомПереименовать улучшаем релевантностьДобавить слайд с выгрузкой слов для автокомплитаДобавить инфу про иДобавить шутокДобавить инфу про автокомплит по фразам