2014年以来、DadataはTipsを見てきました。 連絡先の詳細(住所、銀行と会社の詳細、メールなど)をすばやく簡単に入力できます。
事は複雑に整理され、それについて話すことにしました。 住所のヒントは最も複雑であるため、取り上げます。
ディレクトリとインデックス作成
「ヒント」は何を促すべきかを知っています。なぜなら、彼らには巨大なガイドがあるからです。 この記事は住所のヒントに関するものですが、このケースのために他のDadatiリファレンスブックをリストします。
のヒントは何ですか | 参考図書 | ディレクトリを取得する場所 |
---|---|---|
住所 | FIAS | 公式サイトからダウンロード |
法人 | 法的実体とEGRIPの統一国家登録簿 | 連邦税務局の年間アクセスから購入 -ディレクトリごとに150 000₽ |
銀行 | ロシア連邦中央銀行の信用機関のハンドブック | 公式サイトからダウンロード |
氏名 | 姓、名 | 自分を集めるか、準備完了を検索する |
メール |
|
|
準備されていない参考書で何かを検索することは、長くて感謝のない仕事です。 したがって、素晴らしいLuceneライブラリを使用して、ソースデータを検索インデックスに変換します。
検索インデックスは、情報をすばやく見つけることができる形式です。
物理的には、インデックスは2種類のファイルのコレクションです。
- インデックス自体を持つファイル、彼らは「ヒント」を探しています。 サービスが活発でスマートになるように、インデックスパーツをRAMに保持します。
- データファイル。 これらのうち、「ヒント」は回答を返します。
インデックスとアドレスのデータは合計で20ギガバイトを占有します。 企業にとっては、ほぼ同じで、残りの重量は軽くなります。
公式のディレクトリからデータを削除して、探していないものと返品しないものを節約します。 また、重複や明らかなエラーも削除します。 たとえば、アドレスによるインデックスには次のものはありません。
- 家の手紙。 FIASには、実際には存在しない膨大な数の文字があります。
- 「house 21/2、p。21/2」という形式の明らかに不可能なオブジェクト。
適切な手がかりを見つける
「ヒント」はかなり注意が必要です。 簡単にするために、プロセスを段階に分けて、それぞれについて詳しく説明します。 質問がある場合は、コメントで質問してください。
1.始めましょう:人が「ヒント」フィールドに文字を入力します。
新しいキャラクターはそれぞれ、新しいパラメーターでサーバーリクエストを起動します。 リクエストの頻度を厳しくすることができます。詳細は後で説明します
2.「ヒント」プラグインがリクエストを収集します。 ディスパッチャーは、人とサーバー間で動作しています-jQueryプラグイン「ヒント」( GitHubのソースコード )。
プラグインは検索用のデータを受信し、それをリクエストにパックしてサーバーに送信します。
プラグインはそれ自体から、返すアドレスの数を追加します。 この番号は、「ヒント」の統合のパラメーターとして設定されます。 数量が示されていない場合、「ヒント」は10個の結果を返します。 20以上を要求するのは無意味です-20のオプションのみが返されます。
プラグインはフィルタリングパラメータも渡します。これらは「ヒント」の統合中にも設定されます。 存在するフィルターは次のとおりです。
- 親による(サマラのモスクワ高速道路でのみ検索);
- FIASレベル(決済のみを検索);
- オブジェクトのタイプ別(都市レベルのFIASには、村議会などの外部オブジェクトがあるため便利です。「都市」のタイプを指定しない場合、「ヒント」も村議会を返します)。
そして、ジオブーストのようなものがあります。 親の制限のように見えますが、アドレスのランキングにのみ影響します。 オムスク通りをモスクワよりも高くしたい場合は、お願いします。
Yandex.Moneyのデフォルトはモスクワの通りです。 都市の制限は、フィルタリングオプション「ヒント」で構成されます
デフォルトでは、プラグインで位置情報が有効になっています。ユーザーの位置をサーバーに転送します。 これも検索パラメーターです。
統合中に、サーバー要求の遅延を調整できます。 たとえば、100ミリ秒の遅延を設定します。 名人が100ミリ秒で4文字を駆動する場合、4文字の新しい文字を含む1つの要求がサーバーに送信されます。 一度に4つのリクエストはありません。
プラグインは、バージョン10以降のIEおよびすべての通常のブラウザーで動作します。 また、jQuery 1.10以降も必要です。
3.キャッシュを確認します。 要求がサーバーに到着すると、「ヒント」は最初にキャッシュを調べます。 彼らは、リクエストのすべてのパラメータで単一のものと一致するものを探しています。
キャッシングは、「M」、「Mo」、「C」などの短いクエリから節約します。 このような類似の組み合わせは膨大な量です。 各文字は個別の要求であるため、キャッシュは検索インデックスへの数百万件のヒットからサーバーを保護します。
キャッシュはすべてRAMにあり、100,000件の結果が含まれています。
4.インデックスで適切なヒントを探しています。 キャッシュに適切なものがない場合、「ヒント」が検索インデックスに送信されます。
ヒントは次の方法でアドレスを検索します。
- 任意の部分。
- 郵便番号
- 廃止された名前。
- 同義語と略語。 彼らのために、「モスクワ時間」、「サンクトペテルブルク」、「エーブルク」、「B」-「ビッグ」などの辞書を作成しました。
このアルゴリズムは、リクエストの最後の単語のみが不完全またはエラーであることを意味します。 人が「モスクワターチ」と書いた場合、「ヒント」は「モスクワターチ*」を探します。
モスクワターチのようなリクエストは失敗します。 人々はアドレスを順番に入力し、「ヒント」はアドレスの各部分の正しいスペルを一貫して提案するため、これは問題を引き起こしません。
プラグインでジオロケーションがオフになっている場合、1〜2文字のリクエストで、「ヒント」は地域、市区町村、都市のみで検索されます。 自宅では、サービスはリクエストの2番目の単語から検索します。
各ヒントの結果には重みが割り当てられます。 特に短いクエリの場合、アルゴリズムは何千ものオプションを見つけることがあるため、重みが必要です。 また、最大20個を返すことができます。 したがって、「ヒント」は結果を重みでソートし、上位のものを返します。
結果をランク付けするアルゴリズムは、Dadatのノウハウです。 これは非常に深刻なことなので、詳細に説明することはできません。
5.結果を並べ替えます。 検索結果の重みが同じ場合、ヒントはそれらをソートします。 ソートアルゴリズムも自己記述型なので、やはり不思議なままです。
6.答えを準備します。 「ヒント」を返すアドレスの形式は、FIASとわずかに異なります。
- モスクワのような都市地域は、地域と都市の両方の分野に戻ってきています。 FIASでは、それらは地域にのみ存在します。 オンラインショップは改訂を求めました。宅配便業者は、都市を「都市」フィールドに立てるようにする必要があります(何!)。
- 住所は、ロシア郵便の規則に従って1行で記載されています。 したがって、リージョンの中心はリージョンの名前なしで与えられ、リージョンの中心は-あなたは理解しています。 たとえば、ノボシビルスクはノボシビルスク地域なしで戻ります。 完全なアドレスもそこにあり、unrestrictabled_valueフィールドに返されます。
- タイプ「通り」、「車線」、「高速道路」は、オブジェクトの音質に応じて、オブジェクトの前後に置き換えられます。 エンディングによって調和を評価します:「Aviation Lane」ですが、「Vasnetsov Lane」。
- ガーデニング協会およびFIASレベル65以降のすべてに、親コミュニティの名前が追加されます。 たとえば、「St。Giant(n。New)」。 FIASによれば、園芸協会は集落に含まれていますが、そのような階層は人々にとって珍しいものです。 したがって、後者は地面のランドマークとして括弧内に単純に表示されます。
7.キャッシュします。 結果を返す前に、「ヒント」はすべてのパラメーターと応答でリクエストをキャッシュします。
キャッシュはLRUアルゴリズムを使用して100,000エントリに制限されているため、サービスはそこからまれな要求をスローします。 「Mo」のような人気のあるものは、キャッシュに永久にハングアップします。
8.プラグインはヒントを描画します。 サーバーから応答を受信し、画面にアドレスを表示し、一致するものを強調表示します。 入力中にEnterを押すと、プラグインはテキストを検出されたプロンプトと比較し、フィールド内の最適なプロンプトに置き換えます。
それが動作する方法です。 ヒントを取り上げると、この記事は少なくとも少し役立ちます。 そして、私たちに働きに来て、一緒にクールなものを考え出してください。 現在、「ヒント」と7人のスペシャリストに関するジャビスタを探しています。