我需要将文本查询从标准的“verbal”布尔值转换为FULLLTEXT MATCH AGAINST +和-系统。
例如,此值:
((word1 AND word2) OR (word3 AND word4 AND word5)) OR word6 NOT word7
字符串
需要转换为:
((+word1 +word2) (+word3 +word4 +word5) word6 -word7
型
我遇到的问题是,当我尝试使用REGEXP_REPLACE与这样的模式:
\\b([[:alnum:]_]+)\\b
型
我不知道如何让函数使用匹配的单词来追加/修改它。我见过其他例子试图使用\1或类似的东西来表示匹配的值,但它根本不起作用。
那么,我如何命令REGEXP_REPLACE动态扫描字符串中的“(word +word”并将其替换为“(+word +word”?还需要做一个简单的前导,如:
它也有点复杂,因为如果我们有:
(word1 AND word2) AND (word3 OR word4)
型
这将需要:
+(+word1 +word2) +(word3 word4)
型
任何关于在不编写超慢解析器的情况下做到这一点的最佳方法的指导都将受到欢迎。
2条答案
按热度按时间o75abkj41#
我想出了如何将下面的AND/OR/NOT布尔语句转换为兼容的MATCH AGAINST解决方案,并希望这对其他人有所帮助。
这将转换:
字符串
到
型
产品编号:
型
j91ykkif2#
在某种程度上,这个SQL风格的解决方案是为了好玩,但也许它会帮助一些人。
个字符
db<>fiddle