我的mysql数据库中有一组包含关键字的列。 (特别是我从google vision api获得的标签数据)。当另一组标签被赋予数据库时,是否有一种简单的方法来匹配和返回类似的记录。
在数据库中:"自行车车辆运输灯底板" 我作为搜索参数提供的内容:"轻型自行车绿色"
我目前采取的方法:使用" LIKE"带通配符的关键字。有一个更好的方法吗? 感谢
答案 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)。您将使用它来“增加”提供的关键字列表,使用相关的单词。 (“飞机”变成“飞机,飞行器,飞机,飞行器,运输”等)。