【问题标题】:Text searching to compare against Mysql database tables文本搜索以与 Mysql 数据库表进行比较
【发布时间】:2013-05-19 16:31:04
【问题描述】:

假设我有一个包含单词的字符串。其中一些词可能是复合词。

我还有一个 MySQL 数据库,其中包含一个表,其中包含一个名为 words 的列。此列可能包含出现在我的字符串中的单词,包括复合词。

当我只有字符串时,我希望能够找出从数据库中检索哪些行。将其拆分为空格字符不是一种选择,因为这将无法检测数据库中是否有任何复合词出现在字符串中。

关于如何解决这个问题有什么建议吗?

【问题讨论】:

    标签: php mysql database text


    【解决方案1】:

    您可以通过以下方法做到这一点。假设您的字符串有空格作为分隔符,并且从不包含逗号。

    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, '[ ,.!?]')
    

    【讨论】:

    • 我想我要试试正则表达式。傻我自己都没想过。
    【解决方案2】:

    我相信您指的是输入字符串和数据库记录之间的相关性。这更适合像 Lucene/SOLR 这样的解决方案。

    也就是说,您可能会从使用 FULLTEXT 索引和搜索中获得一些好处:

    http://dev.mysql.com/doc/refman/5.5/en/fulltext-natural-language.html

    【讨论】:

    • 不是相关性,只是发生。字符串“我的车撞到了树”。并且包含值“car”和“tree”的表将希望返回与这些值对应的两行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多