私は、FirstName> MiddleName> LastName階層(質問のために〜10k行)があるとします。つまり、「John> Mary-Anne> Eddy」または「Eddy> John> Jacob」行を持つことができます。要点は、階層がほとんど意味を持たず、ユーザーにとって非常に異質であるということです(たとえば、国>州>都市の構造)。3レベル階層の効率的な検索
このように構造化されておらず、混乱しているため、ユーザーに自動入力ボックスを提供したいと考えています。彼らがタイプするとき、可能性のある部分文字列一致を検索しなければなりません、そして、それらがあるレベルで彼らの検索文字列を "ルート"するとき、結果はそのレベルの下に結果を制限します。今
、「ジョン」という名前の人たちがたくさんあるので、それは彼らが「ジョン」と入力した場合、彼らは唯一のジョン>アレン
- のような結果を取り戻すことはほとんど意味があります>アレクサンダー
- ジョン>アレン> Burschawitz
- ジョン>アレンは... 100回繰り返す...
彼らは一意の行 "ジェイソン>ジョン>スミス" を参照してくださいことは決してないだろうので。
代わりに、彼らは戻ってのような何かを得る必要があります(「*」「これが存在下記ちょっと、たくさんのより多くの行」のユーザーにだけ任意の指標である):
- ジョン>アレン> * は、
- ジェイソン>ジョン>スミス
- マイク>ジョン> *
- メアリー>エレーナ> Johnason
彼らは "ジョン>アル" を入力すると、結果は次のようになります"John>"の下にあるものに限られますが、上記と同様にグループ化する必要があります。
説明が分かりやすいと思います。要件は少し緩いです。人がツリーを検索して後で何を見つけることができるように、ちょうど合理的なもの。
ここでは、行内の検索語を探してその位置を把握し、部分文字列を作成し、グループごとに並べ替えを行い、上記の結果を得るための順序付けを行う興味深いSQLがありますが、十分な。
私はこの問題を典型的なLAMPスタック(Oracleを除く)で解決しようとしています。共有ホスティングではないので、私はサーバーを完全に制御できます。データは数週間ごとに少量で変化し、検索結果は妥当な時間(例えば、検索インデックスを更新するクーロンは問題にならない)で陳腐化することがあります。
私はあなたの何をしようとしているのか正確には分かりません。あなたがもっと分かりやすいかどうかわかりません。 – 108
...おそらく、より良い類推:あなたがURLのリストを持っていて、 "com"を検索した場合、domain.com/a、domain.com/b、domain.com/bは不要です。あなたは単に "domain.com/"がほしいと思うでしょう。それ以降の結果は "other.org/Computers" –
...かもしれません。あなたがdomain.com/a、/ b、/ cを望まない理由は、他の結果がプッシュされるこれまでのところ、上位10の結果には表示されませんでした。 –