如何排除全文SQL查询中的任何其他单词?

问题描述 投票:0回答:1

我需要查找以任何顺序/组合包含所有给定单词的记录,但没有任何其他单词,例如:

SELECT * FROM `table` WHERE MATCH (`field`) AGAINST('+word1 +word2 +word3 +word4' IN BOOLEAN MODE);

此查询不排除未列出的单词。

排除带有减号的单词,例如

-word5 -word6
,情况并非如此,因为无法预测句子中可能出现哪些单词。

是否可以排除查询中不存在的所有单词?

数据示例。我的数据库包含数百万个琐碎的物种名称(植物、动物等),其语言没有严格的词序。例如,乌克兰语。我对每个物种都有一个记录,但用户输入可以是单词的任意组合,例如:

чорна сосна
сосна чорна

європейська сосна
сосна європейська

європейська чорна сосна
сосна чорна європейська
чорна європейська сосна
чорна сосна європейська

чорна кримська сосна
сосна кримська чорна
кримська чорна сосна
чорна сосна кримська

чорна кримська європейська сосна
кримська європейська чорна сосна
чорна європейська кримська сосна
сосна європейська кримська чорна
сосна чорна європейська кримська
сосна чорна кримська європейська

甚至可以使用超过 4 个单词的组合。所有这些块都是不同的物种,仅获得一项记录很重要。

sql mysql mariadb full-text-search
1个回答
0
投票

您可以通过删除匹配的单词和空格并查看是否没有留下任何内容来检查该字段中是否没有任何其他内容:

SELECT * FROM `table`
WHERE MATCH (`field`) AGAINST('+word1 +word2 +word3 +word4' IN BOOLEAN MODE)
    AND 0 = CHAR_LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(`field`,'word1',''),'word2',''),'word3',''),'word4',''),' ',''))

如果除了空格之外还有标点符号或其他非单词字符,您可能还需要删除它们,或者使用正则表达式更改删除空格和长度测试,查看是否还有剩余的单词字符。

© www.soinside.com 2019 - 2024. All rights reserved.