2010-09-07 55 views
2

越來越多的我看到搜索不僅在特定列中查找子字符串,而且他們似乎在所有列中搜索。一個例子是在亞馬遜,你可以搜索「阿諾德」,它會發現電影奔跑的人主演的阿諾德施瓦辛格爾和古德玩具阿諾德打鼾豬。我不知道這種類型的搜索(廣泛搜索?全球搜索?)是什麼,這使我感到困惑。但我真正想知道的是以何種方式完成這種類型的搜索的正常模式是什麼。用於搜索整個數據庫記錄而非特定字段的模式

明顯,而緩慢,方式做這將是尋找在筆者,「阿諾德」的說明文的標題,「阿諾德」子串「阿諾德」等

的想到的第一個快速解決方案是將用於描述產品的每個詞的映射存儲到產品本身,然後搜索該詞映射。這可能很快,但對我來說看起來並不太合適。

有可能有一百種方法來完成這一點,其中一些可能甚至不使用數據庫。但是規範是什麼?

回答

1

我已經完成了這項工作,將XML版本的項目存儲在表格中的XML列中,然後在該列中進行搜索,而不是在其他列中進行搜索。

+0

這是一個想法。在搜索LIKE'%Arnold%'時,您會在該列上使用什麼樣的索引以避免完整的索引掃描? – 2010-09-07 20:05:58

+0

通常,我將在該表上啓用全文,然後將該列添加到全文索引並以這種方式進行搜索。 – 2010-09-08 14:05:55

+0

+1:我喜歡這個主意。所以「全文搜索」就是這個適當的術語,或者是Oracle世界中的「Oracle文本」。 – 2010-09-08 16:53:04

1

也許他們沒有以您期望的方式存儲數據。

例如,他們可以將所有標題,作者,描述以及每個其他可搜索字段存儲在一個表中,並使用屬性來區分字段的類型。

+0

這是我認爲最有可能的,類似於問題中的「想到的第一個快速解決方案」。你能否說一些主要的實現是這樣完成的?如果是這樣,請給我們指出一個。 – 2010-09-07 21:02:15