2015-12-01 2 views
0

Я хотел бы несколько советов о том, что это лучшее направление принять со следующими критериями поиска мне нужно реализовать в моем приложении проекта страсти:Rails пользовательского поиска с помощью PostGreSQL советы

  • поле поиска будет принимать в строке, в этом случае будет вопрос
  • в моей базе данных У меня будет, например, 100 предварительно написанных ответов с заголовком: строка ответ: текст и тег: строка
  • В поиске будет отображаться не менее трех ключевых слов из вопрос, три тега ответа
  • результат поиска будет отображаться на странице ответов # index и показывать только один ответ.

Было бы лучше построить что-то в jQuery, которое преобразует строку тега в массив тегов? Таким образом, я мог бы сравнивать с индексами ...

Я попытался использовать ElasticSearch и провел около 5 часов, пытаясь установить его без везения.

Спасибо!

ответ

0

Если основной критерий поиска соответствует show answer that has three or more of the search terms as tags, тогда это будет немного сложно реализовать с помощью Postgres.

Есть несколько маршрутов вы могли бы пойти, ни один из которых исполнят так же быстро, как запрос Elasticsearch:

  1. SQL подчиненный запрос на в AnswerTags таблице:

    Что-то вроде:

    SELECT answer_id

    FROM answer_tags

    WHERE tag_text IN (<list of query terms>)

    GROUP BY answer_id HAVING COUNT(*) >= 3

    ORDER BY COUNT(*) desc

  2. Использовать Postgres-зависимый тип массива, чтобы держать все метки в поле ответа. Написать хранимую процедуру для вычисления тегов пересечения/перекрывание:

    Некоторые предлагаемые подходы в этой теме: Postgres - Function to return the intersection of 2 ARRAYs?

Если вы преследуете Elasticsearch в качестве решения, вы будете иметь гораздо более высокую производительность (хотя, если у вас всего 100 записей, это может быть не очень важно) и более простой путь реализации. (См. minimum_should_match parameter associated with the match query type).

Elasticsearch также позволяет намного больше нюанса в ваших согласующих логических и поисковых функций (например,случаи tiebreaking где соответствуют несколько записей, autosuggesting заголовков ответа или метки, синонимы/вытекающим и другие методы текста нормализации)

Упругих недавно приобрели большой Elasticsearch хостинг компании Found.no, которая является хорошим выбором, если вы хотите, чтобы обойти задачи установки/конфигурации для немедленно встаньте и бегите. Они предлагают 14-дневную бесплатную пробную версию, а Found принадлежит Elastic, обновляется быстрее, чем любые другие узлы ES, и включает в себя премиальные плагины с каждым экземпляром кластера.

+0

Спасибо за совет Петра! Я буду пытаться установить Elasticsearch –

Смежные вопросы