如何在 SQL 实现的倒排索引中搜索多个词?
How to search an inverted index implemented in SQL for multiple words?
我正在尝试为 SQL commnets 数据库制作一个搜索引擎。我在网上看到,最好的方法之一是制作倒排索引。
我的倒排索引的 table 如下。如果这不正确并且需要更改,请告诉我,这很容易完成。
您可以使用此设置相当轻松地找到单个单词,如下所示:
SELECT comment_terms.term, comment_terms.frequency, comments.body FROM comment_terms
INNER JOIN comments ON comment_terms.comment_name = comments.name
WHERE comment_terms.term = 'reddit'
ORDER BY frequency DESC
这给了你这个 table:
term | frequency | body
-------+-----------+-------
reddit | 24 | etc..
但我想知道如何搜索多个词,以便返回结果的正文必须包含您搜索的所有词。请让我知道是否需要重新注册我的 table 以实现此目的。干杯。
预期输出
我期待这样的事情:
GET COMMENTS THAT HAVE 'pig', 'dog'
| comment |
|--------------|
| that pig dog |
| ...pig...dog |
一般方法:
零! 你的 comment_terms
table 应该有这些字段 (Id
,CommentId
, TermId
)
首先 你已经得到了搜索查询的所有词。
例如,您有 dog
,id
为 1,pig
,id
为 2。
第二个 您在 comment_terms
中搜索同时具有 ID(1 和 2)并且在 comment_terms
中也有 2 条记录的评论 table(GROUP BY HAVING COUNT(commentId)
)
我正在尝试为 SQL commnets 数据库制作一个搜索引擎。我在网上看到,最好的方法之一是制作倒排索引。
我的倒排索引的 table 如下。如果这不正确并且需要更改,请告诉我,这很容易完成。
您可以使用此设置相当轻松地找到单个单词,如下所示:
SELECT comment_terms.term, comment_terms.frequency, comments.body FROM comment_terms
INNER JOIN comments ON comment_terms.comment_name = comments.name
WHERE comment_terms.term = 'reddit'
ORDER BY frequency DESC
这给了你这个 table:
term | frequency | body
-------+-----------+-------
reddit | 24 | etc..
但我想知道如何搜索多个词,以便返回结果的正文必须包含您搜索的所有词。请让我知道是否需要重新注册我的 table 以实现此目的。干杯。
预期输出
我期待这样的事情:
GET COMMENTS THAT HAVE 'pig', 'dog'
| comment |
|--------------|
| that pig dog |
| ...pig...dog |
一般方法:
零! 你的 comment_terms
table 应该有这些字段 (Id
,CommentId
, TermId
)
首先 你已经得到了搜索查询的所有词。
例如,您有 dog
,id
为 1,pig
,id
为 2。
第二个 您在 comment_terms
中搜索同时具有 ID(1 和 2)并且在 comment_terms
中也有 2 条记录的评论 table(GROUP BY HAVING COUNT(commentId)
)