【问题标题】:Check if a list of other strings is %LIKE% another string检查其他字符串的列表是否是 %LIKE% 另一个字符串
【发布时间】:2018-03-14 21:21:37
【问题描述】:

是否有一种简单的方法来检查字符串列表是否是给定字符串的 %LIKE%?

例如:

书 动物 一个

都满足“A Book about Animals”的这个条件吗?

我知道我可以写出 Title Like '%book%' AND '%animal%' LIKE Title 等,但这似乎不太实用。

我将它用于自动完成,我在其中返回每个单词都在结果中的结果。

【问题讨论】:

  • 我认为您误解了LIKE 运算符的语法。
  • 只是打错了..已修复

标签: mysql sql sql-like


【解决方案1】:

mate...将可搜索的列变成“全文”列然后做

SELECT * FROM books WHERE MATCH(fulltext_column) AGAINST('animal book a')

最好的方法。 :) 见http://devzone.zend.com/article/1304

【讨论】:

  • 在自动完成上使用 FULLTEXT 搜索有意义吗?我认为您在自动完成时需要完美的 %LIKE% 精度..
  • 满足您的需求。您不想要完美的精确度 - 您希望能够以任何顺序匹配单词 - 这样限制太多了。
  • 我担心的是 FULLTEXT 有诸如停用词、最小长度等限制。虽然 LIKE 在精确度上是完美的......所以我认为它更适合自动完成
  • 如果更适合您的需要,您可以使用 ft_stopword_file 变量编辑停用词列表(或将其设置为 '' 以索引所有与 ft_min_word_len 一样长或更长的词)。您还可以使用 ft_min_word_len 变量更改最小索引字长,该变量存在的原因相同。 (取自stackoverflow.com/questions/2320838/…
  • 这样做的问题是我在网站的其他地方使用 FULLTEXT,我确实希望这些选项以这种方式设置
【解决方案2】:

您应该查看http://lucene.apache.org/solr/,它可以让您索引您的数据,然后可以提供一个 REST API,您可以调用该 API 来填充自动完成下拉菜单。

【讨论】:

  • 感谢您的提示.. 现在虽然我快到最后期限了,所以我想用 mysql 来解决这个问题
【解决方案3】:

据我所知,您有两种选择:

1) 执行包含许多 WHERE 子句的查询。

2) 维护列的副本,其中所有单词都已排序。然后您可以对搜索标记进行排序并执行查询:

SELECT * FROM Table WHERE Title_sorted LIKE "%a%animal%book%"

【讨论】:

  • 是的,您也可以使用 SOLR,但如果没有,您可以执行列出的选项 (2)。
  • 选项 2 需要按顺序排列 3 个单词。
  • 对不起,我刚才没有回复这个问题。您维护一个单独的排序列是有原因的;)
【解决方案4】:

MySQL 有一个全文搜索索引,我建议您查看它以获得有效的结果。对于自动完成功能来说,使用 Lucene 可能有点过头了。

【讨论】:

  • 在自动完成上使用 FULLTEXT 搜索有意义吗?我认为您需要完美的 %LIKE% 自动完成精度..
猜你喜欢
  • 2019-05-11
  • 2022-07-01
  • 2011-02-07
  • 1970-01-01
  • 2019-01-04
  • 2013-05-12
  • 2018-06-06
  • 2011-12-16
相关资源
最近更新 更多