Пример сопоставления SQLite3 FTS3 / FTS4 - PullRequest
3 голосов
/ 23 февраля 2012

Я использую модуль FTS4 SQLite3 и у меня возникла проблема с примером вспомогательной функции matchinfo ().

В данный момент я просто пытаюсь запустить пример matchinfo () из http://www.sqlite.org/fts3.html#matchinfo и это не работает.

Я пробовал это на Windows 7 с SQLite 3.5.9 (скомпилированная версия), на Ubuntu Linux OS 10.04.4 с SQLite 3.6.22 и на Mac OS 10.6.8с SQLite 3.7.10 (обе версии скомпилированы вручную).Во всех случаях модуль FTS4 включен, и все из документации работает (смещения и функция фрагмента, полнотекстовые поисковые запросы и т. Д.).В Ubuntu и Mac OS я не получаю никаких результатов при использовании примера matchinfo ().В Windows командная строка дает мне странные символы.Я попробовал это следующим образом: используя скрипт PHP, используя NaviCat для SQLite3 и в самой командной строке.В любом случае это одно и то же.

Это код PHP, который я использую для примера:

<?php

$db = new SQLite3("matchtest.db", SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE);
$db->exec("CREATE VIRTUAL TABLE t1 USING fts4(a, b)");
$db->exec("INSERT INTO t1 VALUES('transaction default models default', 'Non transaction reads')");
$db->exec("INSERT INTO t1 VALUES('the default transaction', 'these semantics present')");
$db->exec("INSERT INTO t1 VALUES('single request', 'default data')");


//$result = $db->escapeString("'default transaction \"these semantics\"'");
$result = $db->query("SELECT matchinfo(t1) FROM t1 WHERE t1 MATCH 'default transaction \"these semantics\"'");

while($row = $result->fetchArray()){
    var_dump($row);
}
?>

Я не нашел ничего относительно этой проблемы в сети.Следовательно, я понятия не имею, как это исправить.Может быть, это потому, что у PHP есть проблемы с BLOB-объектами?

Я надеюсь, что вы, ребята, сможете мне помочь.Спасибо!

1 Ответ

1 голос
/ 06 марта 2012

Чтобы увидеть значение как вывод терминала, используйте как:

select quote(matchinfo(t1)) from t1 where t1 match "default transaction";

Это показывает значение как

X'0200000002000000020000000300000002000000000000000100000001000000010000000200000002000000010000000100000001000000'
X'0200000002000000010000000300000002000000000000000100000001000000010000000200000002000000000000000100000001000000'

Также ... Эта функция php помогла мне немного лучше понять функцию C, указанную в документации по SQLite3, и вы можете увидеть, как большой двоичный объект преобразуется в строку в этом, а не в массив int.

...