假设我有一个包含单词的字符串。其中一些词可能是复合词。
我还有一个 MySQL 数据库,其中包含一个表,其中包含一个名为 words 的列。此列可能包含出现在我的字符串中的单词,包括复合词。
当我只有字符串时,我希望能够找出从数据库中检索哪些行。将其拆分为空格字符不是一种选择,因为这将无法检测数据库中是否有任何复合词出现在字符串中。
关于如何解决这个问题的任何建议?
我相信您指的是输入字符串和数据库记录之间的相关性。这更适合像 Lucene/SOLR 这样的解决方案。
也就是说,您可能会从使用 FULLTEXT 索引和搜索中获得一些好处:
http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html
您可以使用以下方法执行此操作。假设您的字符串有空格作为分隔符并且从不包含逗号。
select *
from words w
where find_in_set(w.word, replace(<your string>, ' ', ',')) > 0;
如果你的字符串中的分隔符有点复杂 - 说它确实有标点,你可能会更好,regexp
而不是find_in_set
:
select *
from words w
where concat(',', <your string>, ',') REGEXP concat('[ ,.!?]', w.word, '[ ,.!?]')