sql 查询拆分句子并搜索每个单词的结果
sql query to split a sentence and search for result on each word
我收到来自 eBay 的关于类别名称的 API 回复,即:"E Liquids & E Cig Cartridges" 问题是,我无法搜索 "E" 会在我自己的类别列表中返回太多结果,所以我必须扫描句子中大于 3 个字母甚至 4 个字母的单词,我需要搜索每个单词然后查找我自己的类别列表以查看哪个最适合 API 调用中的未知句子并设置最佳匹配的类别,我不是 sql 向导因此我的问题。我会想象创建一个临时 sql 函数然后循环直到找到结果。预先感谢您的帮助。
这是实现此目的的方法:
/*
CREATE TABLE testData(result INT, term CHAR(255));
INSERT INTO testData VALUES
(1, 'Cig'),
(2, 'Liquids'),
(3, 'E');
*/
SET @NGram = 'E Liquids & E Cig Cartridges';
DELIMITER $
DROP PROCEDURE IF EXISTS parseNGram$
CREATE PROCEDURE parseNGram(VNGram TEXT)
BEGIN
DECLARE VN, VLoopPos, VGramLength INTEGER;
DECLARE VGram CHAR(255);
SET VN = CHAR_LENGTH(VNGram) - CHAR_LENGTH(REPLACE(VNGram, ' ', '')) + 1;
SET VLoopPos = 0;
searchLoop: WHILE VLoopPos < VN DO
SET VGramLength = LOCATE(' ', VNGram);
SET VGram = LEFT(VNGram, VGRamLength);
SET VNGram = RIGHT(VNGram, CHAR_LENGTH(VNGram) - VGramLength);
IF CHAR_LENGTH(VGram) > 1 THEN
# Do someting with the required token, here is an example
SELECT result FROM testData WHERE term = VGram LIMIT 1;
LEAVE searchLoop;
END IF;
END WHILE;
END$
DELIMITER ;
CALL parseNGram(@NGram);
如果我遗漏了什么,请告诉我,
此致,
詹姆斯
我收到来自 eBay 的关于类别名称的 API 回复,即:"E Liquids & E Cig Cartridges" 问题是,我无法搜索 "E" 会在我自己的类别列表中返回太多结果,所以我必须扫描句子中大于 3 个字母甚至 4 个字母的单词,我需要搜索每个单词然后查找我自己的类别列表以查看哪个最适合 API 调用中的未知句子并设置最佳匹配的类别,我不是 sql 向导因此我的问题。我会想象创建一个临时 sql 函数然后循环直到找到结果。预先感谢您的帮助。
这是实现此目的的方法:
/*
CREATE TABLE testData(result INT, term CHAR(255));
INSERT INTO testData VALUES
(1, 'Cig'),
(2, 'Liquids'),
(3, 'E');
*/
SET @NGram = 'E Liquids & E Cig Cartridges';
DELIMITER $
DROP PROCEDURE IF EXISTS parseNGram$
CREATE PROCEDURE parseNGram(VNGram TEXT)
BEGIN
DECLARE VN, VLoopPos, VGramLength INTEGER;
DECLARE VGram CHAR(255);
SET VN = CHAR_LENGTH(VNGram) - CHAR_LENGTH(REPLACE(VNGram, ' ', '')) + 1;
SET VLoopPos = 0;
searchLoop: WHILE VLoopPos < VN DO
SET VGramLength = LOCATE(' ', VNGram);
SET VGram = LEFT(VNGram, VGRamLength);
SET VNGram = RIGHT(VNGram, CHAR_LENGTH(VNGram) - VGramLength);
IF CHAR_LENGTH(VGram) > 1 THEN
# Do someting with the required token, here is an example
SELECT result FROM testData WHERE term = VGram LIMIT 1;
LEAVE searchLoop;
END IF;
END WHILE;
END$
DELIMITER ;
CALL parseNGram(@NGram);
如果我遗漏了什么,请告诉我,
此致,
詹姆斯