【问题标题】:manually search an inverted index手动搜索倒排索引
【发布时间】:2013-07-05 16:04:43
【问题描述】:

我从 2 个表中的文档创建了一个倒排索引:

  • index_token(token_id,token)
  • index_documents(doc_id,token_id,storage_document_id)

现在我想选择在同一个 storage_document 中出现“cat”和“dog”这两个词的文档。

我的尝试是:

SELECT * FROM index_token INNER JOIN index_documents ON index_token.token_id = index_documents.token_id WHERE index_token.token = 'cat' OR/AND index_token.token = 'dog'

OR 使第二个标记为可选,因此我得到包含狗或猫但不包含狗和猫的文档。 并且没有给我任何结果。

那么我必须如何更改查询才能获得预期的结果?

它也应该接受两个以上的关键字。

【问题讨论】:

    标签: mysql search inverted-index


    【解决方案1】:
    SELECT dog_docs.doc_id from
    (
    SELECT index_documents.doc_id 
    FROM index_documents 
    INNER JOIN index_token
    ON index_token.token_id = index_documents.token_id
    WHERE index_token.token = 'cat'
    ) cat_docs
    INNER JOIN
    (
    SELECT index_documents.doc_id 
    FROM index_documents 
    INNER JOIN index_token
    ON index_token.token_id = index_documents.token_id
    WHERE index_token.token = 'dog'
    ) dog_docs
    ON cat_docs.doc_id = dog_docs.doc_id
    

    【讨论】:

    • 是的,它朝着正确的方向发展,但必须共同的文档引用是 storage_document_id,doc_id 只是 index_documents 的主键
    • 但我想知道是否有更可扩展的解决方案?所以我必须为每个额外的关键字添加一个全新的 INNER JOIN 块......不是很好,但我认为它有效
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 2014-03-02
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2011-04-26
    • 2012-05-12
    相关资源
    最近更新 更多