2011-09-13 46 views
1

有人可以请我指出正确的方向,我目前有一个可搜索的数据库,并遇到搜索问题的标题。数据库搜索减去“前缀”

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

+0

你正在使用什么样的搜索?标准的LIKE或全文搜索? – robjmills

+0

所以,如果你有一个像“驯服sh”“这样的标题,你会希望它在搜索中出现使用术语”the“,但你不希望”闪亮“出现? – gordatron

+0

好的这里有一个例子,感谢大家的快速回复; 分页结果AZ,你点击T,想要所有的东西都以T开头,所以,“The Shining”会出现在S下面,因为如果人们在开始时忘记或不知道有一个“The”,他们会没有找到他们正在寻找的东西,除非他们进行搜索。这是分页结果,A-Z。 – Renai

回答

2

几个选择:

一)在“库”格式,这意味着您处理标题并将其存储为

Scarlet Pimpernel, The 
Tale of Two Cities, A 

B)存储用于显示目的原来不变标题存储标题,并添加一个新的“library_title”字段来存储a)中的处理版本。

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

+0

对不起,但库的格式已经失去了我。对不起,我是一个新手 – Renai

+0

我会为那些'NULL'标题使用IF语句,并且将它们与标题一起使用吗?那简单? – Renai

+0

Sorted :)谢谢,比我想象的要容易得多,可能还没有做得好,但功能很好:)谢谢 – Renai

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 
0

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

+0

有没有必要'''在停用词列表中,并已被排除。 – Johan

2

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

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

  • 分隔字段,你就quesiton
  • 经与字符数的单独的字段说话的方式从一开始分拣
  • 更换最初的“的的时候忽略排序

在其他...

+0

请使用任何代码示例?我在这方面严重不合格,因此奋斗,谢谢 – Renai

+0

在阅读您对原始问题的最后评论之后,现在我相信您不需要全文搜索,只需要一种方法来订购结果。我会选择下面@Marc B指出的其中一个选项。 – bfavaretto

+0

感谢bfavaretto,对我来说看起来很容易理解 – Renai

0

尝试寻找到像LTRIM,RTRIM等一些SQL函数,并在具有完全相同的DAT一个临时列中使用这些功能一个。通过使用LTRIM,RTRIM通过放弃任何您希望的单词来修改数据。然后在修改后的列上执行搜索并返回整行作为结果!