ファイル置き場 日本Cassandraコミュニティ

 0  1  36  2018-01-16 22:59:01 Report infringing document
Lucandra を使ってみる 〜第 2 回〜 Solandra を動かすまで 2010/8/19 株式会社ぐるなび 佐藤 史彦 Agenda ➲前回までのおさらい Solandra を動かす 今回のまとめ 前回までのおさらい ➲Lucandra とは? Index 構成 特徴 注意点 Lucandra とは ?Cassandra ベースの Lucene バックエンド Lucene の Index を Cassandra にストア (IndexWriter/Reader の Cassandra 対応 )対応する Lucene のバージョンは 2.9.1 Cassandra は 0.6 系 Lucene Java Application 検索 Hits Hits Document Document Document Document Document Document インデックス作 成 QueryParser QueryParser Analyzer Analyzer Query Query Document Document Document Document Document Document Field Field Field Field Field Field IndexSearcher IndexSearcher IndexWriter IndexWriter IndexReader IndexReader Disk Lucene Lucene Index Index Analyzer Analyzer Lucandra Java Application 検索 Hits Hits Document Document Document Document Document Document インデックス作 成 QueryParser QueryParser Analyzer Analyzer Query Query Document Document Document Document Document Document Field Field Field Field Field Field IndexSearcher IndexSearcher IndexWriter IndexWriter IndexReader IndexReader Cassandra Lucene Lucene Index Index Analyzer Analyzer Index 構成 Keyspace :Lucandra ColumnFamily :Document Key :インデックス名のハッシュ +ドキュメント ID Column Name :フィールド名 Value :フールド値 SuperColumnFamily :TermInfo Key :インデックス名 +フィールド名 )のハッシュ +フィールド名 +単語 SuperColumn :ドキュメント ID インデックス生 成時のオプショ ンによって、作 られるカラムが 決まる (Lucene と同じ )Column Name :Frequencies Value :当該文書中の当該単語の出現頻度 Column Name :Norms Value :当該単語における文書のノルム Column Name :Offsets Value :当該文書中の当該単語のバイト位置オフセッ ト Column Name :Position Value :当該文書中の当該単語の出現位置 特徴 ➲Lucene API がほぼそのまま利用可能 Index のスケーラビリティは Cassandra 依 存 Partitioner に OrderPreservingPartitioner を 使う(と、フル機能が使える) できること 次スライド README より Lucandra でできること 1 Real-Time indexing (documents become available almost immediately) 2 3 4 5 6 7 8 No optimizing Search Sort Range Queries Delete Wildcards and other Lucene magic Faceting/Highlighting 4,5,7 -RandomPartitioner では不可 注意点 ➲RandomPartitioner ではできないことがあ る (レンジスキャンを必要とするもの) OrderPreservingPartitioner だと、単一イン デックスで大量のドキュメントを扱う場合 にデータが偏りがちになると予想される →InitialToken の調整で対応? 注意点 ➲Analyzer で複数単語の Query が生成される もの( N-gram など)を使用する場合 は、 TermInfo の Position カラムを作成する 必要がある(ここは Lucene とは違うとこ ろ) 指定例: doc.add(new Field("name",name, Store.YES, Index.ANALYZED, Field.TermVector.WITH_POSITIONS))Solandra 動かす ➲Solandra とは ?ビルド 設定 起動 データストア 検索 Solandra とは ?Cassandra ベースの Solr バックエンド Solr の Index を Cassandra にストア (IndexWriter/Reader の Cassandra 対応 )対応する Solr のバージョンは 1.4.0 Solandra とは ?Solr が Lucene ベースの検索サーバであるよ うに、 Solandra は Lucandra がベースとい うだけ ちなみに、 Solr の特徴は -XML/HTTP や JSON, Ruby, Python の API -検索ヒット箇所のハイライト機能 -ファセット検索 -キャッシュ機能 -レプリケーション機能 -Web 管理インタフェース ビルド lucandra.jar に solandra も含まれているの で、 Lucandra をビルドしていれば必要なし $tar xztf tjake-Lucandra-c632677.tar.gz $cd tjake-Lucandra-c632677 $ant lucandra.jar solr-example/ に Solr(+Jetty) 一式があります $cd solr-example 設定 (solrconfig) solrconfig.xml にて、 Cassandra(Thrift) の設定 をします $vi solr/conf/solrconfig.xml 1) SolandraIndexWriter の部分 str name="cassandraHost">192.168.56.101 int name="cassandraPort">9160 bool name="cassandraFramed">false updateHandler> 設定 (solrconfig) 2) SolandraIndexReaderFactory の部分 str name="indexName">solrshopsearch str name="cassandraHost">192.168.56.101 int name="cassandraPort">9160 bool name="cassandraFramed">false indexReaderFactory >この通り、 Writer/Reader に指定するクラス が Solandra 固有のものになっていることが わかります 設定 (solrconfig) ここでは Cassandra 接続の設定が効いているかどうか確認す るために、単一ノードだがあえて外部サーバの Cassandra を使用した 実際、エラーが出て結構はまってしまったのだが Lucandra では設定ホストに初回接続後、 describe_ring で取得した end-point に対してランダムに接続する実装が含まれている (lucandra.CassandraProxyClient )上記はメソッドの引数で「ランダム」か「単体直」かを指 定できるのだが、そのメソッドを呼んでいる部分が 「ランダム」でハードコーディングされている 設定 (solrconfig) SolandraIndexWriter コレ 設定 (solrconfig) SolandraIndexReaderFactory コレ 設定 (solrconfig) ちなみに、エラーが出た理由は、 Cassandra が単一ノードで ノード間接続の ListenAddress が localhost だったため、 describe_ring で取得される end-point が 127.0.0.1 だった storage-conf.xml: Address to bind to and tell other nodes to connect to. You _must_ ~change this if you want multiple nodes to be able to communicate! Leaving it blank leaves it up to InetAddress.getLocalHost()This ~will always do the Right Thing *if* the node is properly configured ~hostname, name resolution, etc),and the Right Thing is to use the ~address associated with the hostname (it might not be).ListenAddress>localhost internal communications port -StoragePort>7000 設定 (schema) 次に、 schema.xml にて Index の設定をしま $す vi solr/conf/schema.xml ここでの設定は Solr でスキーマ定義をする 場合と一緒です(あまり詳しくはないけど) 設定 (schema) 今回は第 1 回の Lucandra で使った日本語サ ンプルと同様に、某飲食店検索 API から取得 したデータを使うことを想定します -id 店舗 ID (ユニークキー) name 店舗名称 -url 店舗ページ URL -address 住所 -tel 電話番号 -budget 平均予算 設定 (schema) 1) スキーマ名(=インデックス名)を変更 ※現行では複数定義できないのがいまいち schema name="solrshopsearch" version="1.2">2) schema/types/fieldType を追加 (CJKAnalyzer を使う fieldType を定義) fieldType name="text_cjk" class="solr.TextField">analyzer class="org.apache.lucene.analysis.cjk.CJKAnalyzer"/fieldType> 設定 (schema) 3) schema/fields/field の内容を今回のデータ に合わせて変更します text 7) schema/copyField で全文検索対象にする フィールドをコピーする指定をします http:/r.gnavi.co.jp/a683900/ field name="address">100-0005 東京都千代田区丸の 内2 -1-1 明治安田生命ビル丸の内マイプラザ B2 field name="tel">03-5219-5481 field name="budget">2500 doc> 検索 管理ツールからクエリを投げてみます 中段にある QueryString にクエリを記述して Search ボタンをクリックします 検索 こんな結果が返ります 検索 JSON もあります( wt=json を指定) 今回のまとめ ➲Solandra の動かし方を確認した 途中からうっすら気づいていたように、後 半はほとんど Solr の話しかしていない つまり、 lib に lucandra.jar を入れて solrconfig の IndexWriter/Reader を Solrandra に変更すれば、既存の Solr 環境 にも適用できる Thanks!
Author
Document relate
Tags

共有ファイル Metacon ファイル置き場

共有ファイル Metacon ファイル置き場 Benkyoukai Final

共有ファイル Metacon ファイル置き場 Metacon

共有ファイル Metacon ファイル置き場 Kof2008 Benkyoukai

ファイル置き場 雇用資料室 Aoyama

ファイル置き場 雇用資料室 Qwl

1Lr 英語実習1Lrなどファイル置き場 Pp

ファイル置き場 勝島運河倶楽部 Rune

ファイル置き場 経営技術勉強会 Funtheory

ファイル置き場 日本Cassandraコミュニティ

Free

Feedback