如何区分用户搜索输入的关键词?

时间:2014-01-20 21:20:05

标签: mysql

我正在做这个项目的家庭作业。我们的想法是建立一个类似于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表中的每一列匹配。

例如,如果用户搜索“Frozen Idina Menzel”,我会首先将搜索解析为单词“Frozen”,“Idina”,“Menzel”我会说像

这样的话
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';

然而,这似乎不是一个非常好的方法,因为有很多不必要的查询,所以我想知道是否有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:1)

使用全文搜索,无论是在MySQL中构建还是在外部搜索。

MySQL Full Text Search

Sphinx Search

ElasticSearch

您可以使用许多工具......

答案 1 :(得分:1)

你如何处理这取决于你离开自己完成项目的时间。对于download,ElasticSearch非常简单,无论平台如何都可以开始运行。

ElasticSearch是一个Inverted Index搜索工具,基于Apache Lucene。如果您首先阅读正确的材料,则可以非常快速地实施ElasticSearch解决方案。在索引时分析数据,您可以应用标记器和过滤器来定义索引的外观。我有一部名为“The Shawshank Redemption”的电影,你已经定义了一个标准的标记器,这将创建一个带有以下术语和小写的索引 - “shawshank”和“redemption”,注意“The”已经消失了,因为这个是一句话。

ElasticSearch使用了很好的DSL查询语言,并提供了大量文档。即使您不将它用于此项目,也请考虑其他人。

注意 - Netflix在您输入时也会建议。 ElasticSearch可以做到这一点。