Daisuke Yamazaki
yama****@scale*****
2009年 10月 24日 (土) 23:25:20 JST
スケールアウト 山崎です. さらに調査を進めたところ,インデックス作成のフラグとして SEN_INDEX_NORMALIZEを指定していると漏れが起きることがわか りました(fulltextbはSEN_INDEX_NORMALIZEのフラグが立っている). SEN_INDEX_NORMALIZEに関するドキュメントはLudiaとSennaで 微妙に違っているのですが,実際の正規化はどうなっていると 考えればいいでしょうか?確かに検索漏れが起きているのは カタカナでの検索でした. Ludia側 「英文字、数字、カタカナ、記号などは全角文字/半角文字の正規化を行い、 英文字に関しては大文字/小文字を正規化した後、インデックスに登録する。」 http://ludia.sourceforge.jp/cgi-bin/moin.cgi/LudiaReadme#id19 Senna側 「英文字の大文字/小文字、全角文字/半角文字を正規化してインデックスに 登録する」 http://qwik.jp/senna/APIJ.html 以上,引き続きよろしくお願いします. On Fri, 23 Oct 2009 21:53:13 +0900 Daisuke Yamazaki <yama****@scale*****> wrote: > 株式会社スケールアウト 山崎と申します. > > Ludiaを使ったシステムを構築しているのですが,検索に対して漏れが > あるようで調査をしております. > > データなどの再現方法を表に出せないため,検索漏れがある際の調査方法を > 模索しております.さらに詳細な調査を行う方法やヒントがあれば教えて > もらえると幸いです. > > 下記本現象が起きる環境と > http://sourceforge.jp/projects/ludia/lists/archive/users/2008-March > /000190.html > 始まるスレッドを参考に試行錯誤した内容になります. > > 0. 環境 > CentOS release 5.2(x86_64) > PostgreSQL 8.2.11 > ludia 1.5.1(pgs2version()より) > senna 1.1.4 (pgs2seninfo()より) > インデックスの作成方法 fulltextb() > CREATE INDEX idx_senna_items_name ON items USING fulltextb((name::text)); > > > 1. クエリ内容 > SELECT * FROM "items" WHERE (items.name @@ E'"xxx"') ; > xxxは3文字の日本語でUTF-8になります. > > 2. クエリ結果 > 一部返ってきて欲しいレコードが返ってきません. > 69件返ってきて欲しいところ 57件 > > 3. REINDEXをテーブル,DBともに行った結果 > 複数回行いましたが,変わりませんでした. > > 4. DROP INDEX, CREATE INDEXを行った結果. > DROP indexを行った場合,クエリは正しく返ってきました.ただこれは > インデックスがないことによるシーケンシャルスキャンの結果だと思われます. > またCREATE INDEXをやり直しても結果は同じでした. > こちらも複数回行いました. > > 5. データベースの再作成 > vacuumがらみの可能性を排除したかったので,dropdbを行い, > DBを再作成しました.こちらも結果は同じでした. > > 以上,よろしくお願いします. > -- > 株式会社 スケールアウト > 代表取締役社長 山崎大輔 Daisuke Yamazaki <yama****@scale*****> > Blog:最速配信研究会 > http://d.hatena.ne.jp/yamaz/ -- 株式会社 スケールアウト 代表取締役社長 山崎大輔 Daisuke Yamazaki <yama****@scale*****> Blog:最速配信研究会 http://d.hatena.ne.jp/yamaz/