2014-01-20 5 views
0

Я работаю над этим проектом для выполнения домашних заданий. Идея состоит в том, чтобы создать сайт, похожий на Netflix.Как отличить ключевые слова от входа пользователя?

Моя задача состоит в том, чтобы:

On the "Searching" page, the customer can search for movies by any of the following attributes or their combination (logical "AND" operation): 
title; 
year; 
director; 
star's first name and/or last name. This means you need to do both: a) first name or last name if only one of the two names is provided; b) first name and last name, if both names are provided. 

мне нужно запросить мою базу данных MySQL для всех фильмов, актеров и т.д., соответствующих их запрос и выплюнуть обратно на моем сайте. Мне интересно, что лучше всего отличить ключевые слова от входа пользователя. Мои первоначальные мысли состоят в том, чтобы просто разграничить ключевые слова пользователя по белым пробелам, а затем попытаться сопоставить их с каждым столбцом в таблице MySQL.

Например, если пользователь ищет «Замороженный Idina Менцель» Я первый разбор их поиска на отдельные слова «Frozen», «Idina», «Менцель», и я бы сказал что-то вроде

SELECT * FROM movies WHERE title = 'Frozen' UNION 
SELECT * FROM stars WHERE first_name = 'Frozen' UNION 
SELECT * FROM stars WHERE last_name = 'Frozen' UNION 
SELECT * FROM movies WHERE title = 'Idina' UNION 
SELECT * FROM stars WHERE first_name = 'Idina' UNION 
SELECT * FROM stars WHERE last_name = 'Idina' UNION 
SELECT * FROM movies WHERE title = 'Menzel' UNION 
SELECT * FROM stars WHERE first_name = 'Menzel' UNION 
SELECT * FROM stars WHERE last_name = 'Menzel' 
SELECT * FROM stars WHERE first_name = 'Frozen' AND last_name = 'Idina'; 
SELECT * FROM stars WHERE first_name = 'Idina' AND last_name = 'Menzel'; 

Однако это не очень хороший подход, так как есть много ненужных запросов, поэтому мне было интересно, есть ли лучший способ сделать это.

+1

Вы когда-нибудь слышали о полнотекстовом поиске? http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html –

ответ

1

Используйте полнотекстовый поиск, либо построенный в MySQL, либо что-то внешнее.

MySQL Full Text Search

Sphinx Search

ElasticSearch

Есть много инструментов, доступных для вашей задачи ...

1

Как вы приближаетесь это зависит от того, сколько времени вы оставили себе, чтобы закончить проект. ElasticSearch чрезвычайно прост для download и встает на работу независимо от платформы.

ElasticSearch - это инструмент поиска Inverted Index, основанный на Apache Lucene. Вы можете быстро реализовать решение ElasticSearch, если сначала прочитаете правильный материал. Данные анализируются во время индекса, вы можете применять токенизаторы и фильтры, чтобы определить, как вы хотите, чтобы ваш индекс выглядел. У вас есть фильм под названием «The Shawshank Redemption», и вы определили стандартный токенизатор, это создало бы индекс со следующими условиями, а в нижнем регистре - «shawshank» и «выкуп», обратите внимание, что «The» исчез, поскольку это это стоп-слово.

Хороший язык запросов DSL используется ElasticSearch с большим количеством документации. Даже если вы не используете его для этого проекта, рассмотрите его для других.

Примечание. Netflix также предлагает по мере ввода. ElasticSearch может это сделать.

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