2012-07-02 115 views
1

Im新的postgresql和PHP,但我期待實施全文搜索,並無法查詢文本搜索的基本查詢,我想打印結果在屏幕上,因爲它會顯示在postgres本身,幫助將是非常棒的。Postgresql文本搜索與PHP

謝謝。

回答

4

Theres很多的概念,你的問題,讓我們通過它運行:

首先,你需要CREATE TABLE

CREATE TABLE person (
    id SERIAL PRIMARY KEY, 
    fullname TEXT NOT NULL, 
    dob DATE, 
    bio TEXT NOT NULL 
); 

插入一些測試數據:

INSERT INTO person (fullname, dob, bio) VALUES 
('Steve Jobs', '1955-02-24', 'Steven Paul "Steve" Jobs...'), 
('Tutankhamun', NULL, 'Tutankhamun (alternately spelled...'); 

使搜索更快,您應該在您打算搜索的列上創建全文索引:

CREATE INDEX person_fts ON person USING gin(to_tsvector('english', bio)); 

在你的PHP腳本,你將不得不connect to PostgreSQL

$dbconn = pg_connect("dbname=mary"); 

現在你可以做pg_query()全文搜索:

$words = "steve jobs"; 
$sql = "SELECT * FROM person WHERE to_tsvector(bio) @@ to_tsquery('$words')"; 
$query = pg_query($dbconn, $sql); 
if(!$query) 
    die("An error occured.\n"); 

如果你想就像你在看到它返回寄託都psql然後渲染記錄到一個TABLE

echo "<table>"; 
while($row = pg_fetch_row($result)) { 
    echo "<tr>"; 
    foreach($row as $cell) 
    echo "<td>{$cell}</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 
+0

是的,我在編輯(woops)時遇到了保存。 –

+0

嗨,創建表不適用於postgres 8.4,我得到一個語法錯誤在底部括號);我覺得很奇怪,因爲我可以用相同的語法創建其他表。 –

+0

固定。這只是一個額外的逗號。 –

0
<?php 
$conn = pg_connect('host=localhost port=5432 dbname=test user=lamb password=bar'); 

$search = 'some words'; 

$result = pg_query($conn, "SELECT id, text FROM some_table WHERE text ILIKE '%$search%'"); 
?> 

<table> 
    <tr> 
    <th>ID</th> 
    <th>Text</th> 
    </tr> 
    <?php foreach($array = pg_fetch_all_columns($result) as $value): ?> 
    <tr> 
    <td><?php echo $value[0]; ?></td> 
    <td><?php echo $value[1]; ?></td> 
    </tr> 
    <?php endforeach; ?> 
</table> 
+1

LIKE/ILIKE不是全文搜索。 –