Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Solrイントロダクション #TechLunch
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Livesense Inc.
PRO
April 21, 2014
Technology
140
0
Share
Solrイントロダクション #TechLunch
Solrイントロダクション
2012/10/31 (水) @ Livesense TechLunch
発表者:松永 一郎
Livesense Inc.
PRO
April 21, 2014
More Decks by Livesense Inc.
See All by Livesense Inc.
Rubyはただの⾔語に⾮ず
livesense
PRO
0
50
28新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
61
27新卒_総合職採用_会社説明資料
livesense
PRO
0
4.8k
27新卒_Webエンジニア職採用_会社説明資料
livesense
PRO
0
9.3k
株式会社リブセンス・転職会議 採用候補者様向け資料
livesense
PRO
0
380
株式会社リブセンス 会社説明資料(報道関係者様向け)
livesense
PRO
1
1.7k
データ基盤の負債解消のためのリプレイス
livesense
PRO
0
610
26新卒_総合職採用_会社説明資料
livesense
PRO
0
13k
株式会社リブセンス会社紹介資料 / Invent the next common.
livesense
PRO
2
64k
Other Decks in Technology
See All in Technology
TSKaigi 2026 - enumよ、さようなら
teamlab
PRO
2
270
AsyncStreamでマルチブロードキャストを実装する
1mash0
1
180
LT準備のToilを削減 〜決定論×確率論のスライド生成CLI〜
shukob
0
120
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.6k
TypeScriptとAngular Signal で実現する保守性の高いアプリケーション設計 - 3層アーキテクチャによる責務分離の実践(たつかわ) https://2026.tskaigi.org/talks/10
nealle
1
140
AI飲み会幹事エージェントを作っただけなのに
ykimi
0
250
社内RAGの導入で気を付けたポイント
yakumo
1
140
ラズパイ & Picoで入門:Zephyr(RTOS)の環境構築からビルドまでの紹介
iotengineer22
0
170
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.4k
The Making of AI Chips
pfn
PRO
0
610
AIコーディングエージェントの活用で、コードは静かに肥大化した
yosukeshinoda
1
140
Terragrunt x Snowflake + dbt で作るマルチテナントなデータ基盤構築プラットフォーム
gak_t12
0
520
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
150
Git: the NoSQL Database
bkeepers
PRO
432
67k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
280
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
910
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
370
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
180
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
180
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
The Cult of Friendly URLs
andyhume
79
6.9k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.9k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
140
Transcript
Solr使ってみた レジュメオープン化への適用
はじめに(免責事項) すいません。現在時刻、2012/10/31 (水) 16:22 ようするに、当日に作ってるありさまです。 な、わけなんで、ちょっと内容荒くてすいません。そ して、よみにくいです。すいません。 一時はキャンセルする事も考えたのですが、
が頭をよぎったんで、がんばりました。
なにを話すか そもそもsolrは全文検索出来る言うけど、詳細には 何が出来るの?って話をします。 転職会議のサブプロジェクトである所のレジュメ オープン化プラットフォームに於いてメインの検索 エンジンとして使う際の、使い所的な話とかをする つもりです。
簡単なSolrの出来る事説明 Solr自体は、 • なにかしらのデータ(mysqlだったり、xmlだった りテキストだったり、なんでも良い)を、要素(更新 日付とかタイトルとか本文とか)に分けて、イン デックス化し、そのインデックスをフィールドと呼 ばれる部分に格納する • フィールドを指定して、文言検索する。
という事が出来ます。
Solrデータ構造 +: n件保持 -: 1件保持 solr + doc -uniqueKey (fieldの特種な形)
+field [+|-] value +dynamic field [+|-] value
fieldについて fieldはvalueを持ちます。valueにデータの対応要 素のインデックス情報が入ります。 設定によってはデータそのものも入れる事が出来 ます。 検索する場合には、このfieldに、query文字列であ るところの「◦◦」が入ってるdocを頂戴的に行ない ます。
fieldについて (default search field) いちいち検索する時にfieldを指定するのが面倒な 時もあると思います。それ用としてfield指定しな かった場合に暗黙的に対象となるfieldを指定する 事が可能です。 習慣的にfield名は text
とするようです。
fieldについて (multi valued) 1fieldに複数のvalueを入れる事が可能です。 例えば、メールの場合、検索する際に、subjectも fromもtoもbodyもdateも串刺しで検索したい場合、 投入する1 fieldに全部投入して、そのfieldを対象 に検索する事が可能です。
fieldについて (multi valued) filedとしてSubject, From, To, Body, Dateを定義 し、それぞれにそれぞれの要素のindexを格納す る。また、text
fieldにもそれぞれの要素のindexを 格納する事が可能と言う事です。 subjectで絞りたい時にはsubject fieldに対して、 発信日時で絞りたい時にはdate fieldに対して queryを発行。 あるいはそれらをグチャグチャでquery発行したい 場合は、text fieldに対して発行。
field (型: fieldType) fieldは型を持ちます。正しく言うと、fieldが保持す るvalueの型です。 型とは、簡単に言うと、インデックス化する際に、ど のように単語を分かち書きしますか?定義みたい なものです。 もちろん、int,boolean, floatなどもありますが、メイ
ンとなるのは、string型をどのように分かち書きしま すかによる型の設計になります。
fieldType 例えば、日本語を対象とするfieldの場合ですが、 • 辞書で分かち書きしたいfieldの場合 • n-gramで分かち書きしたいfieldの場合 • 英語等のように空白で分かち書きしたfieldの場合 などがあると思います。 それらを、それぞれ、
• text_ja • text_n_ja • text_en のような型を宣言/設定し、各fieldはどの型を利用するかを記述 します。
dynamic field 今迄説明して来たfieldは、事前に定義体で、この fieldはこういう名前で、こういうvalue(型)で入れる と設定する必要がありました。 でも、各docに動的にfieldを足す事も出来ます。そ のfieldがdynamic fieldです。
dynamic field レジュメの場合、スキルという項目があり、 • TOEIC: 713 • 英検: 1級 •
会話: ビジネス用途 • java: 2年 みたいに、複数持つ事があると思います。 また、検索する際に、「TOEIC 500点以上」、かつ、「javaを3年 以上」、自己PRに「火消し」が入っているで絞りたい場合がある と思います。
dynamic field どんなスキルがあるかをマスタ管理する方法もあると思います が、複数メディアを統合するサービスだとそれもなかなか大変 かと思います。 また、フリーワード検索との併用が難しい(mysqlのqueryとsolr へのqueryの2段回呼び出しが必要になる)状態になります。
dynamic field それらを全てsolrに寄せる事が可能なのが、 dynamic fieldになります。 データ投入の際に、dynamic filedとして、TOEIC fieldや、英検 filedを足し、valueとして、700や1等 を設定し、queryとして英検
fieldが500以上でみた いなqueryが発行出来ます。
dynamic field skill fieldを作り、その下にkey:valueで入れればい いじゃん的な発想もあると思いますが、valueは index情報が入る場所なので、fieldの入れ子は出 来ません。
fieldがどう保持されているか 実際の値 (エンジニアでtext fieldを検索) curl 'http://localhost:8983/solr/select?indent=on&version=2.2&q=%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82% A2&fq=&start=0&rows=10&indent=on' ..... <doc> <date
name="created_at">2012-09-26T15:09:02Z</date> <int name="id">29299</int> <arr name="job_category"><str>生産技術_機械_</str><str>生産技術・生産管理・プロセス開発(電気・電子) </str><str>生産技術・生産管 理・プロセス開発(半導体) </str></arr> <str name="job_content">【具体的な業務内容】 ... </str> <str name="pr_content">私たちの会社は、一人ひとりの エンジニアによって....</str> <str name="pr_title">1人ひとりの... </str> <arr name="text"> <str>1人ひとりの... </str> <str>【具体的な業務内容】 ... </str> </arr> <date name="updated_at">2012-09-26T15:21:16Z</date> <float name="生産技術_機械__ja">6.3</float> <float name="生産技術・生産管理・プロセス開発(半導体) _ja">8.9</float> <float name="生産技術・生産管理・プロセス開発(電気・電子) _ja">3.6</float> </doc> .....
dynamic field query: select w.id, jc.name from partner_work w inner
join patner_work_job_relation jr on (w.id = jr.partner_work_id) inner join job_small_category jc on (jr.job_small_category_id = jc.id) where w.id = 29299; result: *************************** 1. row *************************** id: 29299 name: 生産技術(機械) *************************** 2. row *************************** id: 29299 name: 生産技術・生産管理・プロセス開発(電気・電子) *************************** 3. row *************************** id: 29299 name: 生産技術・生産管理・プロセス開発(半導体) 3 rows in set (0.00 sec)
dynamic field 生産技術(機械)のfieldが6〜9の範囲値を持つ情報を抽出 $ curl 'http://localhost:8983/solr/select?indent=on&version=2.2&q=%E7%94%9F%E7%94%A3%E6% 8A%80%E8%A1%93_%E6%A9%9F%E6%A2%B0__ja%3A%5B6+TO+9% 5D&fq=&start=0&rows=10&fl=id+%E7%94%9F%E7%94%A3%E6%8A%80%E8%A1%93_%E6%A9% 9F%E6%A2%B0__ja&indent=on&wt=csv' id,生産技術_機械__ja
95,7.3 234,7.6 368,7.0 1183,6.2 1189,7.0 1356,8.7 1528,7.8 1540,6.8 1582,6.3 1801,8.8
わかちがきとsynonym なかなか調整が難しいです。 詳細は実演で。
最後に。 TermsComponentで存在しうる単語のsuggestの調査にまだ 未着手。これないと、スキルのフリー文言検索が結構しんどくな るなーと思ってます。 日付での検索が( ゚Д゚)マンドクセーだったり、いろいろあるのです が、とりあえず、 • https://confluence.livesense.jp/pages/viewpage.action? pageId=32768534
• https://confluence.livesense.jp/pages/viewpage.action? pageId=32768699 あたりに適当に纏めているので、参考にして下さい。