匹配mysql数据库中

时间:2017-09-17 18:20:37

标签: mysql search

我的mysql数据库中有一组包含关键字的列。 (特别是我从google vision api获得的标签数据)。当另一组标签被赋予数据库时,是否有一种简单的方法来匹配和返回类似的记录。

在数据库中:"自行车车辆运输灯底板" 我作为搜索参数提供的内容:"轻型自行车绿色"

我目前采取的方法:使用" LIKE"带通配符的关键字。有一个更好的方法吗? 感谢

2 个答案:

答案 0 :(得分:1)

我建议的解决方案是您必须使用STORED PROCEDURE创建一个" words"的表格。

word_id INT() AUTOINCREMENT
word   VARCHAR(255)

然后拆分字段中的每个单词并将其添加到words表中。如果new,则添加旧的获取现有代码。然后创建一个used_words表,将每个记录与contains中的多个单词相链接。

record_id *(current record ID)*
word_id INT()
CONSTRAINT record_id *current_table(current record id)*
CONSTRAINT word_id words(word_id)

最后,要将列表与另一个列表进行比较,您会看到您选择的每个单词是否都存在于used_words表中

select word_id from used_words
WHERE word_in not in (
   SELECT word_id FROM used_words
   WHERE record_id="$existing_id"
)
WHERE record_id="$new_entry_id"

如果结果为NULL,则所有单词都存在。否则,您有不同单词的列表。

算法应该有效,但不是单个SQL查询

答案 1 :(得分:1)

这不是一个“完整”的答案,我不希望它被接受。

您的问题主题是“信息检索”,并且有几本关于这一主题的好书(尽管它们的范围远远超出您的具体问题 - 所以YMMV除非您对该主题特别感兴趣)。

我读了normalisation。我首先将这些关键字分离到一个连接表中,并将其编入索引。

另请查看stemming的主题。它不是一颗银弹,但它是获得正确结果的核心。一些数据库引擎可以为你处理 - MySQL不能(据我所知)。我建议查看Porter Stemmer以获得一个好的英语示例。每种主要语言都有图书馆。

最后考虑同义词。没有简单的方法来处理这些(在代码中);你需要建立一个他们的数据库(更好的是,抓住free one from online)。您将使用它来“增加”提供的关键字列表,使用相关的单词。 (“飞机”变成“飞机,飞行器,飞机,飞行器,运输”等)。