2013-07-05 83 views
0

I 2个表内创建从文档的倒排索引:手动搜索倒排索引

  • index_token(token_id,令牌)
  • index_documents(DOC_ID,token_id,storage_document_id)

现在我想要选择单词'cat'和'dog'出现在同一个storage_document中的文档。

我的尝试是:

SELECT * FROM index_token INNER JOIN index_documents ON index_token.token_id = index_documents.token_id WHERE index_token.token = '猫' 或/与 index_token.token = '狗'

或使第二令牌可选,所以我得到的文件有狗或猫,但不是狗和猫。 并没有给我结果。

那么,我该如何改变查询来获得预期的结果呢?

它也应该接受超过2个关键字。

回答

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 
+0

是它进入了正确的方向,但是这必须是在常见的是storage_document_id文档参考,DOC_ID只是index_documents – pila

+0

的主键,但我不知道是否有一个更可扩展的解决方案吗?所以我必须为每个附加关键字添加一个全新的INNER JOIN块...不是很好,但我认为它可以工作 – pila