2012-10-09 224 views
0

我有一個基於搜索引擎的網站,目前處於測試模式http://www.jobportfolio.co.uk。該網站有一個包含以下字段的作業表(job_company,job_title,job_description,job_location),除了描述是文本字段外,所有字段均爲Var。所有字段都被索引爲FullText。改進全文搜索MYSQL

我目前的做法是要根據標題,地點和公司。這似乎工作正常,但我想通過添加描述字段來改善搜索結果。但是,當我添加說明字段時,搜索似乎要花費更長時間。即使只有包含12000行的表格,它似乎也很慢。

我使用下面的對陣查詢來選擇結果

MATCH(job_posts.job_title, job_company) AGAINST('".$this->mysqli_escape($job_title)."' IN BOOLEAN MODE) 

有沒有人對如何提高搜索性能的任何意見?

+0

你有沒有涵蓋那些涉及某些領域或多個全文索引一個單一的全文索引/字段的一部分? –

+0

此外,還有更多的選擇,而不僅僅是'IN BOOLEAN MODE'。 – Xeoncross

+0

我使用PHPMYADMIN並分別爲每個字段設置全文索引。有一個索引可以覆蓋所有索引是否更好? – ORStudios

回答

0

嗯,我首先想到的是從「外面」解決這個問題:這是可以接受的使用多個不同的領域搜索的形式?如果你願意有4個搜索字符串,每個搜索字符串在不同的列中搜索,我懷疑這會自己減少負載。例如:

當有人類型的「位置」字段,添加了一項條款,只針對位置字段搜索文本匹配的查詢。

當在「描述」字段類型的人,你加了一項條款,對描述字段搜索文本匹配的查詢。否則,您不會與描述字段中的任何內容匹配。

如果您不需要能夠將文本輸入到一個地方,搜索「所有可能的領域」吧,這種解決方案將防止額外的緩慢,直到有人特別想在說明文字進行搜索。所以查詢速度根據搜索者的需求而變化。

+0

我想我知道你的意思。當前,如果您搜索該位置,則當前有2個表單字段,只會搜索位置字段。如果說明字段完整,它將搜索其他字段。 – ORStudios

+0

是的。但是我理解了你上面引用的SQL代碼片段「MATCH(job_posts.job_title,job_company)」('{$ string}'BOOLEAN MODE)',表示您輸入的字符串將與列出的所有字段同時進行比較。在許多情況下,這是必要的,如果不這樣做,搜索就沒有意義;但如果默認總是搜索所有字段,則性能會受到影響。 –