30
P2P検索エンジン ORBISについて Dec. 19, 2011 @ceeflyer (Yusuke FUJISAKA) CyberAgent, inc.

P2P search engine 'ORBIS

Embed Size (px)

Citation preview

Page 1: P2P search engine 'ORBIS

P2P検索エンジンORBISについて

Dec. 19, 2011@ceeflyer (Yusuke FUJISAKA)

CyberAgent, inc.

Page 2: P2P search engine 'ORBIS

ORBISとは

• リアルタイム検索エンジン

• 自律分散検索エンジン• Peer to Peer

Page 3: P2P search engine 'ORBIS

制作の経緯• もともとはTwitter-like serviceの検索

• リアルタイム

• スモールスタート・スケーラブル• ある種の割り切り

• 分散型

• P2Pの考え方

Page 4: P2P search engine 'ORBIS

ORBISのapplicationHTTP Servlet

Morpho-parser

P2P Server

Indexing Memory

Index/Search Queue

Page 5: P2P search engine 'ORBIS

ノード構成• 比較的小規模(~1,000台程度)を想定

• フルメッシュネットワークを構成

• Master-Slaveの差なし

• ノード間の通信はMessagePack-RPC(http://msgpack.org)を利用

Page 6: P2P search engine 'ORBIS

ノード構成

Node 310.0.0.6

Node 110.0.0.4 Node 2

10.0.0.5

Page 7: P2P search engine 'ORBIS

ノード追加

New comer10.0.0.7

connect?node=10.0.0.6

Page 8: P2P search engine 'ORBIS

ノード追加

Page 9: P2P search engine 'ORBIS

ノード追加

Page 10: P2P search engine 'ORBIS

生存確認

Beacon

Page 11: P2P search engine 'ORBIS

生存確認

?

Page 12: P2P search engine 'ORBIS

生存確認

×

Page 13: P2P search engine 'ORBIS

復帰○

Beacon

Page 14: P2P search engine 'ORBIS

復帰

Page 15: P2P search engine 'ORBIS

インデックスフィールド:Content (形態素解析対象)

xxx...

Appendix (形態素解析しない)yyy...

Flag (属性)zzz...

Page 16: P2P search engine 'ORBIS

インデックス

IndexTitle: xxxxxxxx

Text: xxxxxxxx...

Page 17: P2P search engine 'ORBIS

インデックス

Hash: 0x51234567

0x61234567

0x77654321

0xFA000123

0x54400000

IndexTitle: xxxxxxxx

Text: xxxxxxxx...

Page 18: P2P search engine 'ORBIS

インデックス

Hash: 0x51234567

0x61234567

0x77654321

0xFA000123

0x54400000

IndexTitle: xxxxxxxx

Text: xxxxxxxx...

Page 19: P2P search engine 'ORBIS

インデックス

形態素解析

Title: xxxxxxxText: xxxxxxx...

Hash: 0x51234567

IndexTitle: xxxxxxxx

Text: xxxxxxxx...

Page 20: P2P search engine 'ORBIS

Content

インデックス

ContentContent ContentContentContent ContentContentContent ContentContentContent ContentContentContent

Term Term

Index IDIndex IDIndex ID Index ID Index ID

Page 21: P2P search engine 'ORBIS

Content

インデックス

ContentContent Content ContentContentContent ContentContentContent Content

Term Term

Index IDIndex IDIndex ID Index ID Index ID

max: 100

Page 22: P2P search engine 'ORBIS

Content

インデックス

ContentContent Content ContentContentContent ContentContentContent Content

Term Term

Index IDIndex IDIndex ID Index ID Index ID

転置インデックスを一定数で固定する

max: 100

Page 23: P2P search engine 'ORBIS

インデックス

• 直接インデックスデータに変換

• 各単語に対して転置インデックス数を一定数で固定• 「投稿日時が新しいものだけ検索」という割り切り

Page 24: P2P search engine 'ORBIS

インデックス

• 一定のレプリケーション数で分散保存• Hashing replication

Page 25: P2P search engine 'ORBIS

検索

SearchQuery: xxxxxx

From: 1 Length: 10

Page 26: P2P search engine 'ORBIS

検索

Result

Intersection

Page 27: P2P search engine 'ORBIS

検索

SearchQuery: xxxxxx

From: 1 Length: 10

?

Page 28: P2P search engine 'ORBIS

検索

Result

あるだけ返す

Page 29: P2P search engine 'ORBIS

検索

• 既知の利用可能な全ノードから検索結果をとりまとめる

• フィルタをかけて結果出力

Page 30: P2P search engine 'ORBIS

オープンソース

• Written in Java• Google code:

http://code.google.com/p/orbis