2011-09-13 10 views
1

誰かが正しい方向に私を指差してくれますか、私は現在検索可能なデータベースを持っており、タイトルで検索する問題に遭遇しました。データベース検索マイナス "The"プレフィックス

タイトルが「The」で始まる場合は、明らかにタイトルが「T」セクションに表示されますが、「The」は検索されないようにするにはどうすればよいでしょうか?タイトルを表示するには2つのフィールドを連結する必要がありますが、プレフィックスを無視して2番目のタイトルだけを検索してください。またはこれを行う別の方法がありますか?助言や指導は素晴らしいでしょう。ありがとう。

+0

どのような検索方法を使用していますか?標準的なLIKEまたはフルテキスト検索ですか? – robjmills

+0

だから、もしあなたが「シュルーの縄張り」のようなタイトルを持っていたら、「the」という言葉を使って検索をしてみたいと思うでしょうが、 "輝く" – gordatron

+0

ここに例があります。 ページ区切りの結果AZ、TをクリックしてTで始まるすべてのものを望むので、「シャイニング」はSの下に表示されます。人々が忘れたり、開始時に「The」があることを知らないと彼らが検索をしない限り、探しているものは見つけられません。これはページ区切りの結果、A-Zです。 – Renai

答えて

2

いくつかの選択肢:

a)の表示目的のために、オリジナルそのままのタイトルを保存)あなたはタイトルを処理し、

Scarlet Pimpernel, The 
Tale of Two Cities, A 

bとそれを格納意味し、「ライブラリ」の形式でタイトルを保存a)から処理されたバージョンを格納する新しい「library_title」フィールドを追加する。

c)記事を保存するための新しいフィールドを追加し、タイトルフィールドに裸のタイトルを追加します。表示するには、2つのフィールドを連結します。タイトルフィールドを検索するだけです。

+0

申し訳ありませんが、ライブラリ形式はすでに私を失ってしまいました。申し訳ありません初心者です – Renai

+0

'タイトル'がNULLの人にはIF文を使用してタイトルを連結しますか?それは簡単ですか? – Renai

+0

ソート済み:)ありがとう、私は思ったよりもずっと簡単でしたが、おそらく偉大な仕事をしていませんでしたが、機能的です:) thanks – Renai

0

データベース

1)TitlePrefix 2)タイトル 3に3つの列を作成します)TitlePostfix

MySQLを使用している場合は、

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

のような4つのメソッドを持っているようにコード、 str_replace関数を使用してクエリから「The」を削除することができます。また、PHPやRubyなどの言語を使用している場合は、データベースサーバに送信する前にクエリをサニタイズするだけで済みます。

+0

'the'はストップワードリストにあり、すでに除外されている必要はありません。 – Johan

2

私は、ストップワードリストに 'the'というフルテキスト検索を使用することをお勧めします。これは検索の問題を解決します(つまり、検索フレーズの 'the'は無視されます)。

ただし、結果をタイトルで注文する場合は、 'T'セクションに 'The'で始まるタイトルが並べられます。これを解決するには、いくつかの方法が考えられます。ここではそれらのいくつかです:

  • フィールドを分ける最初の「の交換
  • をソートするときに、あなたがquesiton文字の数と別のフィールドを持つ
  • にした方法は、最初から無視されます
  • 中でも

を...ソートするため

+0

どのようなコード例をしてください? – Renai

+0

元の質問に対するあなたの最後のコメントを読んだら、あなたは結果を注文するためだけにフルテキスト検索が必要ないと思う。私は以下の@Marc Bで指摘されているオプションの1つを使用します。 – bfavaretto

+0

ありがとうbfavaretto、私は理解しやすいです – Renai

0

などLTRIM、RTRIMのようないくつかのSQL関数に見てみて、まったく同じDATを持つ一時列にこれらの関数を使用しますa。 LTRIM、RTRIMのいずれかの単語を削除してデータを修正してください。次に、変更された列に対して検索を実行し、結果として行全体を返します。

関連する問題