1

首字母缩略词在我的数据库中很痛苦,尤其是在进行搜索时。我还没有决定是否应该在搜索查询期间接受句点。这些是我在搜索时遇到的问题:

  • 'IRQ' 不会找到 'IRQ'
  • 'IRQ' 不会找到 'IRQ'
  • “中断请求。” 或“IR.Q”将找不到“IRQ”或“IRQ”

ETC...

同样的问题也适用于省略号 (...) 或三个系列的句点。

我只需要知道我应该采取什么方向来解决这个问题:

  • 将字符串插入数据库时​​删除所有句点会更好吗?
  • 如果是这样,我可以使用什么正则表达式来识别句点(而不是椭圆或三个系列的句点)来识别需要删除的内容?
  • 如果可以将句点保留在首字母缩略词中,如果我在搜索字段中输入“IRQ”,如何在查询中编写脚本以查找“IRQ”,通过 MySQL 使用正则表达式或我不知道的 MySQL 函数?
4

5 回答 5

2

我对每个问题的回答:

  • 将字符串插入数据库时​​删除所有句点会更好吗?

是和不是。您希望数据库具有原始文本。如果需要,请创建一个单独的“清理”字段以进行搜索。在这里,您可以删除句点,将所有内容设为小写等。

  • 如果是这样,我可以使用什么正则表达式来识别句点(而不是椭圆或三个系列的句点)来识别需要删除的内容?

    /\.+/

这会在给定位置找到一个或多个周期。但是您需要将其与您的搜索公式集成。

注意:数据库上的正则表达式并不具有高性能。对此要谨慎。

其他注意事项:您可能希望在 MySQL 中使用全文搜索。这也不知道对超过 1000 个条目的数据集具有高性能。如果您有大数据并且需要全文搜索,请使用 Sphinx(作为 MySQL 插件和基于 RAM 的索引系统提供)。

  • 如果可以将句点保留在首字母缩略词中,如果我在搜索字段中输入“IRQ”,如何在查询中编写脚本以查找“IRQ”,通过 MySQL 使用正则表达式或我不知道的 MySQL 函数?

是的,通过我在第一个项目符号的答案中描述的 2 个字段。

于 2013-02-03T16:27:21.233 回答
1

您需要考虑输入的神圣性。如果改变不是你的,那就不要改变它。相反,您应该有一个单独的系统来允许文本搜索,并且可以根据它认为合适的方式更改文本,以便能够处理这些类型的问题。

阅读 Lucene,特别是 Lucene 的标准分析器,了解通常执行的更改类型以允许成功搜索复杂文本。

于 2013-02-03T16:25:07.320 回答
1

我认为您可以使用REGEXPMySQL 的功能来发送首字母缩写词:

SELECT col1, col2...coln FROM yourTable WHERE colWithAcronym REGEXP "#I\.?R\.?Q\.?#"

如果你使用 PHP,你可以通过这个简单的循环来构建你的正则表达式:

$result = "#";
foreach($yourAcronym as $char){
    $result.=$char."\\.?";
}
$result.="#";
于 2013-02-03T16:25:50.313 回答
1

您正在搜索的功能是全文搜索。Mysql 支持 myisam 表,但不支持 innodb。(http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

或者,您可以选择提供该功能的外部框架。Lucene 是一种流行的开源软件。( lucene.apache.org )

于 2013-02-03T16:25:54.497 回答
0

会有2种方法,

1. save data -removing symbols from text and match accordingly,
2. you can make a regex ,like this for eg.

select * from table where acronym regexp '^[A-Z]+[.]?[A-Z]+[.]?[A-Z]+[.]?$';

Please note, however, that this requires the acronym to be stored in uppercase. If you don't want the case to matter, just change [A-Z] to [A-Za-z].

于 2013-02-03T16:27:28.273 回答