我有mysql数据库,我有一个包含多个列的表,其中一个包含我需要搜索的关键字。
关键字位于引号内的列中,如此
ID keywords
------------------------------------------------------------
row 1: "one" "one two" "one two three" "three four five" "two three one"
row 2: "four" "forty four" "fifty four" "thirty four two" "three four five"
正如您所看到的,每个"关键字"可以是引号中的单个单词或一组单词,其中引号中的单词充当一个关键字。
我想找出哪些行包含所需的关键字组。
要匹配关键字,整个报价必须完美匹配。
例如,如果我想找到哪些行包含"两个"它应该返回ZERO比赛。如果我搜索"三四五"它应该返回第1行和第2行。
可能有数千行这样的行。
关键字列的类型为TEXT
我想制作一个索引来加速关键字列的搜索,我看到有不同类型的索引,如UNIQUE,INDEX,SPATIAL,PRIMARY,FULLTEXT等。我应该选择哪个索引关键字列。什么是MYSQL语句呢?
如何使用索引制作MYSQL语句以搜索关键字组
现在我有这个声明要做搜索,我不确定它是否是最好的方法。
SET @find='three four five';
SELECT * from table WHERE MATCH (keywords) AGAINST(find IN NATURAL LANGUAGE MODE);
答案 0 :(得分:1)
这是糟糕的数据库结构。 但是,如果您现在无法更改数据库,并且需要获取结果:
SELECT * from table WHERE `keywords` LIKE '%"three four five"%'
如果此变量来自用户,请使用prepared statement。然后查询将如下所示:
SELECT * from table WHERE `keywords` LIKE '%"?"%'
答案 1 :(得分:0)
修复您的数据模型!不要将关键字存储在单个列中。 SQL具有用于存储列表的出色数据结构。它被称为表。
所以,请使用:
create table entityKeywords (
entityKeywordId int auto_increment primary key,
entityId int,
keyword varchar(255),
unique (entityId, keyword),
index (keyword)
);
现在您可以使用此表来利用SQL并搜索关键字。
全文功能非常强大。 。 。但它们真的是为实际文本而设计的。关键字只是列上的一种属性,具有1:n关系。最好使用单独的表格对它们进行建模。