mysql - 手动搜索倒排索引

标签 mysql search inverted-index

我从 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 使第二个标记可选,因此我得到包含狗或猫的文档,但不包含狗和猫。 并且没有给我任何结果。

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

它还应该接受 2 个以上的关键字。

最佳答案

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

关于mysql - 手动搜索倒排索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17492957/

相关文章:

PHP do/while 准备语句失败

c++ - STL "closest"方法?

algorithm - 在全文搜索中使用索引进行多词查询(例如网络搜索)

c++ - 与直接编译的可执行文件相比,linux .so 性能下降

ruby - 在 Ruby 中创建倒排索引哈希

mysql - 如果我只使用 FIELD 不为 null 进行搜索,我应该为字段编制索引吗?

php - 将 PHP LDAP 结果插入 MySQL

php - 如何从表单中选择要上传到Mysql的表

ios - 如何在 YouTube Search API v3 中获取内容详细信息? ( swift )

sql - 搜索整个数据库记录的模式,而不是特定字段