2014-01-20 66 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表中的每一列進行匹配。

例如,如果用戶搜索「冰凍伊迪娜門澤爾」我會先分析自己的搜索爲單個單詞「凍結」,「伊迪娜」,「門澤爾」,我會這樣說

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

你如何處理這個取決於你有多少時間留給自己完成該項目。 ElasticSearch對於download極其簡單,並且無論平臺如何都能運行起來。

ElasticSearch是基於Apache Lucene的Inverted Index搜索工具。如果您先閱讀正確的材料,您可以非常快速地實施ElasticSearch解決方案。數據在索引時進行分析,您可以應用分詞器和過濾器來定義索引的外觀。我有一部名爲「The Shawshank Redemption」的電影,你已經定義了一個標準的標記器,這將創建一個索引,其中包含下列術語和小寫字母 - 「shawshank」和「redemption」,請注意,「The」消失了,因爲這個是一個停止詞。

ElasticSearch使用了很好的DSL查詢語言,並提供了大量文檔。即使你不把它用於這個項目,也要爲其他人考慮。

注 - Netflix在您鍵入時也會提示。 ElasticSearch可以做到這一點。