LIFULL Creators Blog

LIFULL Creators Blogとは、株式会社LIFULLの社員が記事を共有するブログです。自分の役立つ経験や知識を広めることで世界をもっとFULLにしていきます。

LIFULL主催の技術勉強会 Ltech 『#21 LIFULL HOME’Sを支える検索技術』開催レポート

こんにちは!LIFULLのエンジニアで、Ltech運営チームの1人 サム (@samukaak) / Twitter です!今回は 2020年9月15日(木)に開催した『Ltech#21 LIFULL HOME’Sを支える検索技術』についてレポートします。

Ltechとは

株式会社LIFULL主催の、技術(エンジニアリング・テクノロジー)をテーマにしたイベントの総称です。 特定の技術に偏らず、様々な技術をピックアップしていきます。

Session1
LIFULL HOME'SのAI施策におけるSolr活用

www.docswell.com

このセッションでは、SolrをつかったAI施策の事例とその際に出た課題と解決方法が紹介されました。ここで紹介されたAI施策とは「AIホームズくんᴮᴱᵀᴬ」というサービスで、住まい探しをするユーザーとの対話を通して学習しぴったりの物件を提案してくれるものです。

SolrとAIチームは別で、一緒に進めるにあたりAIチームからリクエスト

ドキュメントごとにベクトルデータを格納、クエリでベクトルを指定してクエリ毎に異なるスコアを計算、並び替えを行いたい

これに対して出した案が『Solr9からはいるKnnの機能を使えば実現できそう!』しかし進めるにあたり課題も見つかる。

課題① Solr9からはいるKnnとは違い、検索ではなく並び替えに使いたい

並び替えに利用したいが、全てを対象にしてしまうと計算量が多くなってしまうが、ReRankで上位のみベクトル計算して並び替えることで解決した。

課題② そもそもSolr8だった

ベクトルのプラグイン( https://github.com/DmitryKey/solr-vector-scoring )を使うことで解決した。

課題③ ベクトルデータをドキュメントに含まない場合も、並び順をコントロールしたい

ベクトルデータの生成はAIチームの担当だが、API経由でリクエストするため高スループットになってしまいスケールアウトが間に合わずリクエストが失敗することがあった。リクエストに失敗するとベクトルデータをSolrに格納できない。そのため、リクエストに成功したがベクトルデータが無いものやリクエストに失敗した際に下駄を履かせることで、計算結果がプラスになるように調整して解決した。

課題④ Solrへの負荷がどうなるか予想できない

本番環境のSolrへのクエリからログを抽出し、検証用にクエリを変換。Solrへリクエストをおこない分析を重ねることで負荷への対策を考えることで解決した。

今後としては「ベクトルデータを圧縮できないか?」「Solr9のKnnの機能を使って実現できないか?」について模索しています。

Session2
コピー&カスタマイズできるSolr環境構築のためにEC2 Image builderを活用した話

www.docswell.com

このセッションでは、開発者が容易に検証等をおこなえるために個別の開発環境を用意したい、しかし現行のデプロイフローだと管理等に問題が出てくる、その問題を解決するためにEC2 Image builderを活用した話でした。

導入に当たり次の3点について苦労されておりました。

  1. バージョン管理
  2. テスト
  3. schemaやクラスタごとに異なる設定

実際に導入してみると、現行のSolrと同じAMIを利用してデプロイするだけで容易に環境を構築できるようになったり、Solrのカスタマイズが容易になったりしました。

Session3
不動産広告と名寄せ

www.docswell.com

このセッションでは、LIFULL HOME'Sにおける名寄せの話でした。

そもそも名寄せとは「複数の物件データをいくつかの属性を見て同一物件として扱うこと」で、LIFULL HOME'Sでも「同じアパートやマンション」「同じ部屋」を1つの物件としてまとめております。

不動産屋はコンビニの数より多いと言われており、その不動産(管理/仲介)会社が扱う物件数を考えると膨大な数になります。名寄せ以前は同一物件でもそのまま表示されていたため、条件によっては同じ物件が数件並ぶこともありました。

LIFULL HOME'Sでは、これまでいくつかのフェーズで名寄せをおこなってきました。

まずフェーズ1「アプリケーションによる名寄せ」では、共通属性によるハッシュ化をおこなうことで名寄せを実現しました。しかし性能や件数の差異による問題が発生しました。

そこで「名寄せを事前におこなった上で検索エンジンに登録」する方法を考案しましたが、様々な理由からLIFULL HOME'Sでは事前名寄せの方法は採用されませんでした。

しかしLIFULL HOME'Sではサイト側のリニューアルのタイミングで全文検索エンジンからSolrに移行、ResultGroupingによる名寄せをおこなうことで住戸単位だけではなく棟単位による名寄せも実現しました。

Solrを導入することで検索エンジンで名寄せができるようになり、その次に名寄せの精度向上や高速化などにも取り組んでいます。

まとめ

今回はLIFULL HOME’Sを支える検索技術としてSolrに関する話を3名のエンジニアに発表いただきました。この他にもLIFULL HOME'Sではメンバーが随時 LIFULL Creators Blog にて情報を発信しています。興味を持っていただいた方にはぜひ1度ご覧いただきたい記事ばかりになっています!

www.lifull.blog

Ltechでは、LIFULLのエンジニアが中心になって皆様の技術欲を満たすよう実例を交えた勉強会を開催しています。今後も Ltech を積極的に開催していきますので、ぜひ気になった方は、connpass で LIFULL のメンバー登録をよろしくお願いします!

lifull.connpass.com

また、LIFULLでは今回紹介した検索基盤に関わるものを含め、数多くの職種の仲間を募集しています。 よろしければこちらのページもご覧ください。

【エンジニア】募集求人一覧 | 株式会社LIFULL
【エンジニア】カジュアル面談 | 株式会社LIFULL