2011-09-13 102 views
1

有人可以請我指出正確的方向,我目前有一個可搜索的數據庫,並遇到搜索問題的標題。數據庫搜索減去「前綴」

如果標題以「The」開頭,那麼很顯然標題將在'T'部分,避免「The」搜索的好方法是什麼?我應該連接兩個字段來顯示標題,但僅通過忽略前綴的第二個標題進行搜索。還是有另一種方法來做到這一點?建議或指導將會很好。謝謝。

+0

你正在使用什麼樣的搜索?標準的LIKE或全文搜索? – robjmills

+0

所以,如果你有一個像「馴服sh」「這樣的標題,你會希望它在搜索中出現使用術語」the「,但你不希望」閃亮「出現? – gordatron

+0

好的這裏有一個例子,感謝大家的快速回復; 分頁結果AZ,你點擊T,想要所有的東西都以T開頭,所以,「The Shining」會出現在S下面,因爲如果人們在開始時忘記或不知道有一個「The」,他們會沒有找到他們正在尋找的東西,除非他們進行搜索。這是分頁結果,A-Z。 – Renai

回答

2

幾個選擇:

一)在「庫」格式,這意味着您處理標題並將其存儲爲

Scarlet Pimpernel, The 
Tale of Two Cities, A 

B)存儲用於顯示目的原來不變標題存儲標題,並添加一個新的「library_title」字段來存儲a)中的處理版本。

c)添加一個新字段來存儲文章,並在標題字段中顯示標題。爲了顯示,你需要連接兩個字段,搜索時只需在標題字段中查看。

+0

對不起,但庫的格式已經失去了我。對不起,我是一個新手 – Renai

+0

我會爲那些'NULL'標題使用IF語句,並且將它們與標題一起使用嗎?那簡單? – Renai

+0

Sorted :)謝謝,比我想象的要容易得多,可能還沒有做得好,但功能很好:)謝謝 – Renai

0

在數據庫中創建三列

1)TitlePrefix 2)標題 3)TitlePostfix

代碼,這樣你有4種方法,如

searchTitleOnly(testToSearch) // search only title column 
searchTitleWithPrefixAndPostfix(testToSearch)//concat all the three columns and search 
searchTitlePrefix(testToSearch) // search title prefix only 
searchTitlePostfix(testToSearch) // search title postfix only 
0

如果你正在使用MySQL,您可以使用str_replace函數從查詢中刪除「The」,或者如果您使用PHP或Ruby或其他語言,則可以在發送到數據庫服務器之前清理查詢。

+0

有沒有必要'''在停用詞列表中,並已被排除。 – Johan

2

我相信最好的方法是使用全文搜索,並在停用詞列表中加入'the'。這將解決搜索問題(即搜索短語中的'''將被忽略)。

但是,如果您按標題訂購結果,則在「T」部分中按照'The'開頭的標題仍然會被排序。爲了解決這個問題,有幾種可能的方法。下面是其中一些:

  • 分隔字段,你就quesiton
  • 經與字符數的單獨的字段說話的方式從一開始分揀
  • 更換最初的「的的時候忽略排序

在其他...

+0

請使用任何代碼示例?我在這方面嚴重不合格,因此奮鬥,謝謝 – Renai

+0

在閱讀您對原始問題的最後評論之後,現在我相信您不需要全文搜索,只需要一種方法來訂購結果。我會選擇下面@Marc B指出的其中一個選項。 – bfavaretto

+0

感謝bfavaretto,對我來說看起來很容易理解 – Renai

0

嘗試尋找到像LTRIM,RTRIM等一些SQL函數,並在具有完全相同的DAT一個臨時列中使用這些功能一個。通過使用LTRIM,RTRIM通過放棄任何您希望的單詞來修改數據。然後在修改後的列上執行搜索並返回整行作爲結果!