我正在做这个项目的家庭作业。我们的想法是建立一个类似于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';
然而,这似乎不是一个非常好的方法,因为有很多不必要的查询,所以我想知道是否有更好的方法来做到这一点。
答案 0 :(得分:1)
答案 1 :(得分:1)
你如何处理这取决于你离开自己完成项目的时间。对于download,ElasticSearch非常简单,无论平台如何都可以开始运行。
ElasticSearch是一个Inverted Index搜索工具,基于Apache Lucene。如果您首先阅读正确的材料,则可以非常快速地实施ElasticSearch解决方案。在索引时分析数据,您可以应用标记器和过滤器来定义索引的外观。我有一部名为“The Shawshank Redemption”的电影,你已经定义了一个标准的标记器,这将创建一个带有以下术语和小写的索引 - “shawshank”和“redemption”,注意“The”已经消失了,因为这个是一句话。
ElasticSearch使用了很好的DSL查询语言,并提供了大量文档。即使您不将它用于此项目,也请考虑其他人。
注意 - Netflix在您输入时也会建议。 ElasticSearch可以做到这一点。