mysql sqlite snippet()函数等价

mklgxw1f  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(231)

sqlite(fts4/5 query)中有一个很棒的snippet()函数,它返回包含搜索匹配项的单词数,这是包含查询(如果匹配)的文本的一部分。你可以突出显示搜索词,而且,最重要的是,你没有得到整篇文章,但只有部分(子字符串)与匹配。有类似的mysql吗?
我对mysql完全是新手,但下面是我现在编写的代码:列字符串是“lorem ipsum dolot sit amet fly,concetetur adipising elit,sed do eiusmod fly tempor incidund ut labore et dolore magna aliqua”
查询字符串为“fly”。
(我不知道jet,如何将搜索查询传递/操作到sql函数,在这个例子中是fly?)是的,我知道sql注入,这只是一个简单的例子。

<?
$db = new PDO(...);
//
$sql = "DROP TABLE IF EXISTS test;
    CREATE TABLE test(tekst TEXT) CHARACTER SET utf8 COLLATE utf8_unicode_520_ci;
CREATE FULLTEXT INDEX idx ON test(tekst);
INSERT INTO test(tekst) VALUES('Lorem ipsum dolot sit amet fly, consectetur adipiscing elit, sed do eiusmod fly tempor incididunt ut labore et dolore magna aliqua.');
";
//
$db->exec($sql);
//
$db->query("SET @off = 16; #char offset
SET @co = 'fly' COLLATE utf8_unicode_520_ci; #the search word
SET @lewa = '' COLLATE utf8_unicode_520_ci; #left string from the match
SET @prawa = '' COLLATE utf8_unicode_520_ci; #right string from the match
");
//
$sql = "SELECT 
@lewa := LEFT(tekst,LOCATE(@co,tekst)-@off),
@prawa := SUBSTRING(tekst,LOCATE(@co,tekst)+@off), 

REPLACE(
    TRIM(TRAILING @prawa 
        FROM 
    TRIM(LEADING @lewa FROM tekst))
    ,@co,CONCAT('<b>',@co,'</b>')
    ) trimmed

FROM test WHERE MATCH(tekst) AGAINST(CONCAT(@co,'*') IN BOOLEAN MODE)";
//
$odp = $db->query($sql)->fetch();
//
echo $odp["trimmed"];
?>

返回:“dolot sit amet fly,consectetur”,但它只适用于查询中的一个单词。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题