Mysql查询倒排索引数据

时间:2014-05-08 10:38:42

标签: php mysql sql inverted-index

我在网站上有数千个页面,我将其解析并存储为Inverted Index viz

  

文档

     
      
  • docid(PK,FK)
  •   
  • URL
  •   
  • charactercount
  •   
  • 单词计数
  •   

Charactercount和wordcount帮助我确定我以后可以使用的简短文档。

  

字符

     
      
  • wordid(PK,FK)
  •   
  •   
  • doc_freq
  •   
  • inverse_doc_freq
  •   

对于inverse_doc_freq计算,我使用虚构的高位数(100000000)来防止重新计算文档总数。

  

LOC

     
      
  • 的wordID
  •   
  • 的docID
  •   
  • word_freq
  •   
  • 重量
  •   
     

(wordid& docid结合独特)

权重是一个简单计算的分数,如标题中的单词+网址+单词频率等单词。

我在搜索搜索词时遇到问题。对于3字搜索,我正在做

  1. 将查询分解为每个单词
  2. 检查每个单词的inverse_doc_freq并删除低idf单词(删除单词)
  3. 干掉剩下的字(假设还剩3个字)
  4. 查询每个单词
  5. 在第4阶段,我被卡住了!我的SQL查询就像

    SELECT d.docid,url,inverse_doc_freq,word_freq,weight from document d,word w,loc l WHERE d.docid=l.docid AND w.wordid=l.wordid AND (word='word1' OR word='word2' OR word='word3') ORDER BY weight DESC

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

1 个答案:

答案 0 :(得分:1)

您需要在文档级别进行汇总。

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;