gpt4 book ai didi

mysql - 多表全文搜索

转载 作者:行者123 更新时间:2023-11-29 03:14:35 25 4
gpt4 key购买 nike

我有三个表,所有表都有一个带全文索引的列。用户将在单个文本框中输入搜索词,然后将搜索所有三个表。

用一个例子可以更好地解释这一点:

documents
doc_id
name FULLTEXT

table2
id
doc_id
a_field FULLTEXT

table3
id
doc_id
another_field FULLTEXT

(我意识到这看起来很愚蠢,但那是因为我删除了所有其他字段和表格以简化它)。

所以基本上我想对 namea_fieldanother_field 进行全文搜索,然后将结果显示为 列表code>documents,最好包含导致找到该文档的原因,例如如果 another_field 匹配,我会显示 another_field 是什么。

我开始研究一个系统,该系统执行三个全文搜索查询并将结果插入到具有如下结构的表中:

search_results
table_name
row_id
score

(稍后可以将结果缓存几天,例如搜索词的哈希值)。

这个想法有两个问题。首先是同一文档最多可以在搜索结果中以不同的分数出现三次。相反,如果搜索词在两个表中匹配,它应该有一个结果,但得分更高。

二是解析结果比较困难。我想显示文档列表,但如果没有某种连接,我不会立即知道 doc_id;但是,要连接的表取决于 table_name 列,我不确定如何实现。

像这样想要搜索多个相关表一定很常见,所以我想我想问的是我是否以正确的方式处理这个问题?有人可以告诉我最好的方法吗。

最佳答案

我会创建一个非规范化的单一索引。即,将所有三种文档类型放入一个表中,其中包含 doc_id、doc_type 字段和单个全文 block 。然后您可以一次搜索所有三种文档类型。

您可能还会发现 Lucene在这种情况下才有意义。它为您提供了更快的搜索速度,以及更多有关搜索和评分工作方式的功能。

缺点是您要为每条记录保留一个单独的非规范化文本副本。好处是搜索速度要快得多。

关于mysql - 多表全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2745048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com