Elasticsearchに基づくスマートブックマーク

時々、以前見た記事が見つからないことに気付き始めました。

覚えている情報によれば、記事は簡単に見つけることができます。 しかし、違います。 Googleで検索しても、ほとんど何も得られません。 コンテンツのスニペットのみを覚えており、検索結果には多くのノイズが含まれています。



これは職場では真実です。 Skypeを使用して、さまざまなGithubプロジェクト、記事、サービスへの便利なリンクを保存および交換しましたが、これらの目的でYammerを使用するようになりました。 これらの方法には両方とも欠点があります。 リンク交換のためのSkypeの主な欠点は、履歴を検索するのが難しいことです。 Yammerの問題は、記事のテキストをインデックス化せず、スニペットのみをインデックス化することです。 自動的に分類する機能はありません。



空き時間に、記事を見つけるために特別に調整されたアプリケーションを作成しました。 その特徴:





登録ユーザーは、すべての記事(すべて)、個人選択(選択)、追加記事(星)の3つのフィードを利用できます。 登録後、個人フィードを編集するためのリンクがメニューに表示されます。 検索バーの右側にある同じドロップダウンリストで、カテゴリごとにフィルターを設定できます。



開発に使用される主なテクノロジー:Ruby on Rails、Sidekiq、Elasticsearch、PostgeSQL。



質の高い検索を実装するために、ソースプラグインから重要なコンテンツを抽出する形態プラグインとgemの可読性を使用しました。



カテゴリーの定義は次のとおりです。 「Web開発」カテゴリの記事には、html、html5、css、css3、javascript、jsなどの用語が含まれています。 したがって、Web開発に関する記事を見つけるには、これらのキーワードのリストを使用してクエリを完了する必要があります。 エラスティックには、クエリ文字列と単純なクエリ文字列の2種類の適切なクエリがあります。後者を選択しました。 彼は決して例外をスローせず、リクエストの無効な部分をドロップしません。
Web開発カテゴリクエリの例
javascript* jQuery coffeescript ajax bootstrap foundation backbone* angularjs css* less sass scss adaptive responsive html* haml DOM frontend "front-end" web "image placeholder" mozilla firefox chrome opera codepen 
      
      









この方法で、カテゴリに分類されるドキュメントを見つけることができます。 これは反対の疑問を提起します-この文書またはその文書が属するカテゴリーを見つける方法は? Elasticsearchでは、ドキュメントとクエリを相互に変更できます。 カテゴリは保存されたクエリであり、特定の記事に適したカテゴリを尋ねることができるようになりました。 これはまさにリクエストのタイプであり、新しい記事またはカテゴリを追加すると、変更はすぐに有効になります。



私は長い間、新しいカテゴリを追加することがどれほど簡単で便利かを考えていました。 便利なクエリエディター、モデレートの可能性、および各ユーザーの貢献度を評価したいと思います。 さまざまな考えがあり、最終的にはgithubのリポジトリに落ち着きました。 Githubを使用すると、リポジトリを分岐し、オンラインでカテゴリを編集できます。 カテゴリファイルの正確性を確認するために、rspecテストがあります。これは、プルリクエストを送信するときにtravis-ciで自動的に実行されます。






All Articles