0

私は自分のサイトの検索エンジンを構築しています。私は自分のサイトのページに含まれるすべての単語とその位置のインデックスを持っています。私はphp配列を使用しています。検索後に返される情報は次のようになります。

'jeff' => 
    array
      1 => 
        array
          0 => int 0
          1 => int 259
          2 => int 444
          3 => int 461
          4 => int 486
'seka'
    array
      1 => 
        array
          0 => int 1
          1 => int 260
          2 => int 445
          3 => int 462
          4 => int 487

jeff のすべての投稿リストを見つけたい場合は、"jeff" をキーとして探します。存在する場合は、のように変数に挿入します$v=index['jeff']

それは簡単ですが、「jeff and seka」のような複数文字列のクエリがある場合はどうなるでしょうか? それらが両方とも存在するかどうかを確認し、それらを異なる配列 (1 つは jeff 用、もう 1 つは seka 用) として返すので、それらを簡単に交差させて両方の検索文字列でドキュメントを見つけることができますか?

4

1 に答える 1

1

編集:コメントの後に書き直しました。私たちが正しい方向に進んでいるかどうかを確認するために、いくつかのフィードバックは良いでしょう!

array_intersect_key()関数を見ましたか? あなたはできるはずです:

$common = array_intersect_key(index['jeff'], index['seka']);

これにより、Jeff と Seka に共通するページのキー (および「jeff」の値) だけを含む新しい配列が得られます。関数に追加の配列をいくつでも指定できます。これにより、(たとえば) 5 つの異なる用語をまとめて検索し、5 つすべてを含むページのみを取得できます。

返される配列には、各ページのキーが含まれます。各キーの値は、array_intersect_key()呼び出しの最初の引数 (私の例では "jeff") から取得されます。つまり、index['jeff']配列のサブセットが返されます。

各ページで他の用語の位置を取得したい場合は、最初に異なる用語で検索を繰り返すか (注意: 非常に非効率的です)、返された結果のキーをループします (配列を取得できます)。キーに$pages = array_keys($common);) を付け、これを他の用語の配列へのインデックスとして使用します。

于 2013-05-28T11:00:14.120 に答える