Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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
Php 倒排索引数据的Mysql查询_Php_Mysql_Sql_Inverted Index - Fatal编程技术网

Php 倒排索引数据的Mysql查询

Php 倒排索引数据的Mysql查询,php,mysql,sql,inverted-index,Php,Mysql,Sql,Inverted Index,我在网站上有上千个页面,我将其解析并存储为反向索引,即 文档 文档ID(主键,FK) 网址 字符数 字数 Charactercount和wordcount帮助我从短文档中确定长文档,我以后可能会使用它们 word wordid(PK,FK) 话 医生频率 反向文件频率 对于逆文档频率计算,我使用虚构的高数字(100000000)来防止重新计算整个文档 loc wordid docid 单词频率 重量 (wordid和docid组合唯一) 权重是在简单的基础上计算的分数,如标题中的单词

我在网站上有上千个页面,我将其解析并存储为反向索引,即

文档

  • 文档ID(主键,FK)
  • 网址
  • 字符数
  • 字数
Charactercount和wordcount帮助我从短文档中确定长文档,我以后可能会使用它们

word

  • wordid(PK,FK)
  • 医生频率
  • 反向文件频率
对于逆文档频率计算,我使用虚构的高数字(100000000)来防止重新计算整个文档

loc

  • wordid
  • docid
  • 单词频率
  • 重量
(wordid和docid组合唯一)

权重是在简单的基础上计算的分数,如标题中的单词+url中的单词+单词频率等

我在为搜索词构建sql查询时遇到问题。对于3字搜索,我喜欢这样做

  • 将查询分解为每个单词
  • 检查每个字的反转频率,并删除低idf字(删除停止字)
  • 将剩余的单词加上词干(假设仍有3个单词)
  • 查询每个单词
  • 正是在第四阶段,我被卡住了!我的SQL查询如下

    选择d.docid、url、反向文档频率、word频率、文档d中的权重、word w、loc l,其中d.docid=l.docid和w.wordid=l.wordid以及(word='word1'或word='word2'或word='word3')按权重顺序描述


    但是返回的文档不正确。相信我可能需要搜索三次才能找到每个单词的文档,然后再尝试查找常用文档,但是如何搜索呢?是否可以只使用1个MySQL查询?是否可以使用以及如何使用?

    您需要在文档级别进行聚合

    select d.docid, d.url, sum(weight) as weight
    from document d join
         loc l
         on d.docid = l.docid join
         word w
         on w.wordid = l.wordid
    where w.word in ('word1', 'word2', 'word3')
    group by d.docid
    order by weight DESC;
    

    “退回的文件不正确”是什么意思?有重复的文件。虽然最好显示所有3个单词的文档,但当前查询仅显示具有1个常用单词的文档。如果我将
    更改为
    ,则显示零个文档-(感谢您的回答。为什么您要使用
    sum
    而不是
    distinct d.docid
    ,因为以后可能也会给出一个结果?还可以使用包含所有3个单词的文档筛选结果吗?@jahajee.com…您几乎不需要
    选择distinct
    。您只需使用
    分组依据
    。在本cas中e、 对于
    sum()
    ,您需要
    group by
    。谢谢您,我重新计算了权重,现在它看起来很完美。相信sum是为每个单词添加所有权重计算所必需的(我以前不理解)。再次感谢。