数据库搜索减去“The”前缀

时间:2011-09-13 16:25:35

标签: php mysql database

有人可以指出我正确的方向,我目前有一个可搜索的数据库,并遇到了按标题搜索的问题。

如果标题以“The”开头,那么显然标题将位于“T”部分,什么是避免被搜索的“The”的好方法?我应该连接两个字段来显示标题,但只搜索忽略前缀的第二个标题。还是有另一种方法可以做到这一点?建议或方向会很棒。谢谢。

5 个答案:

答案 0 :(得分:2)

一些选择:

a)以“图书馆”格式存储标题,这意味着您处理标题并将其存储为

Scarlet Pimpernel, The
Tale of Two Cities, A

b)存储原始未更改的标题以用于显示目的,并添加新的“library_title”字段以存储来自a的处理版本。

c)添加一个新字段来存储文章,并在标题字段中添加裸标题。为了显示,你可以连接两个字段,搜索你只需查看标题字段。

答案 1 :(得分:2)

我认为最好的方法是使用全文搜索,在停用词列表中使用'the'。这将解决搜索问题(即,将忽略搜索短语上的''')。

但是,如果您按标题订购结果,则以“The”开头的标题仍会按照您的说法排序,“在'T'部分”。为了解决这个问题,有几种可能的方法。以下是其中一些:

  • 分开字段,就像你在问题上说的那样
  • 在排序时有一个单独的字段,其中包含要从头开始忽略的字符数
  • 更换初始''用于排序

其中......

答案 2 :(得分:0)

在数据库中创建三列

1)TitlePrefix 2)标题 3)TitlePostfix

代码使您有4种方法,如

searchTitleOnly(testToSearch)  // search only title column
searchTitleWithPrefixAndPostfix(testToSearch)//concat all the three columns and search 
searchTitlePrefix(testToSearch) // search title prefix only
searchTitlePostfix(testToSearch) // search title postfix only

答案 3 :(得分:0)

如果您使用的是mysql,则可以使用str_replace函数从查询中删除“The”,或者如果您使用的是PHP或Ruby或其他语言,则可以在发送到数据库服务器之前清理查询。

答案 4 :(得分:0)

尝试查看一些sql函数,如LTRIM,RTRIM等,并在具有完全相同数据的临时列上使用这些函数。使用LTRIM修改数据,RTRIM通过删除你喜欢的任何单词。然后对修改后的列执行搜索并返回整行作为结果!