Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中按相关性(包括词序)排序_Sql_Words_Relevance_Sql Order By - Fatal编程技术网

如何在SQL中按相关性(包括词序)排序

如何在SQL中按相关性(包括词序)排序,sql,words,relevance,sql-order-by,Sql,Words,Relevance,Sql Order By,我正在创建一个“智能”搜索引擎,通过关联性来查看数据库。我的系统计算您的句子中有多少单词对应于包含文本的数据库字段“tag_clean”,并尝试获得正确的结果(每个研究一个) 例如,在tag_clean字段中显示“search youpla boom”,如果录制“search bim”,则会显示第二个条目,如“search youpla bim” 我的系统为每个单词设置一个点,并得到最相关的结果。一切正常,但我最大的问题是,它完全忽略了单词顺序 如果你有“谷歌图像测试”和“谷歌测试”,你用我的系

我正在创建一个“智能”搜索引擎,通过关联性来查看数据库。我的系统计算您的句子中有多少单词对应于包含文本的数据库字段“tag_clean”,并尝试获得正确的结果(每个研究一个)

例如,在tag_clean字段中显示“search youpla boom”,如果录制“search bim”,则会显示第二个条目,如“search youpla bim”

我的系统为每个单词设置一个点,并得到最相关的结果。一切正常,但我最大的问题是,它完全忽略了单词顺序

如果你有“谷歌图像测试”和“谷歌测试”,你用我的系统搜索“谷歌测试图像”,最相关的将是第一个,但第二个是正确的

我想要一个能够理解词序重要性的系统,但我不知道如何在SQL中做到这一点

我的SQL请求的一个示例(重要部分是CASE WHEN结尾):


谢谢大家:)

首先,我不确定原始SQL是否是最好的工具。您应该了解您正在使用的任何引擎的全文功能。搜索文本是一个相当解决的问题,数据库支持此功能(通过对基础语言的扩展)

假设您想继续,问题在于您的结构。您可以开始为标记清除添加额外的子句,如“%googletest%”和每隔一个双向组合。这可能是一个快速而肮脏的解决方案

您真正的问题是将关系数据存储在单个字段中。应该有一个关键字表,每个文档上的每个关键字都有一个单独的行。这将包含以下列:documentID、KeyWord和KeyWordPosition。使用关键字Position,您可以开始执行所需的邻近搜索


不过,您最好研究现有软件中的全文功能。

您说得对,我已经考虑过这个“肮脏”的解决方案,但我想要干净的:)您的系统可以很好,我会考虑的,谢谢您,伙计:)
SELECT * 
FROM keywords 
WHERE tag_clean LIKE 'google%' 
    AND (static = 0) 
    AND 
    (
        tag_clean LIKE '%google%' 
        OR tag_clean LIKE '%test%' 
        OR tag_clean LIKE '%image%'
    )
    OR 
    (
        tag_clean = 'google test image' 
        AND static = 1
    ) 
ORDER BY 
    ((CASE WHEN tag_clean LIKE '%google%' THEN 1 ELSE 0 END) 
        + (CASE WHEN tag_clean LIKE '%test%' THEN 1 ELSE 0 END) 
        + (CASE WHEN tag_clean LIKE '%image%' THEN 1 ELSE 0 END)) 
DESC LIMIT 0, 1;