From asari @ users.sourceforge.net Wed Jan 9 10:49:47 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Wed, 9 Jan 2008 10:49:47 +0900 Subject: [Ludia-users 169] =?iso-2022-jp?b?cGdzMnNuaXBwZXQxIBskQiROPVBOTzdrMkwkTxsoQiB8fCA=?= =?iso-2022-jp?b?GyRCJEskaCRrSjg7ek5zTyI3ayQsJEckLSRKJCQhKRsoQg==?= Message-ID: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> こんにちは。浅利といいます。 pgs2snippet1() の出力結果を連結しようとしたとき、 (私にとっては) 不可解な挙動に遭遇しました。 どういうことなのか知りたいと思いますので、質問させてください。 test=# SELECT '...' || pgs2snippet1(1, 100, 1, ' *', '* ', -1, 'テスト', 'テストベース') || '....'; -[ RECORD 1 ]----------------- ?column? | ... *テスト* ベース || を使って文字列を連結しようとしても、右側の文字列が連結できていません。 ところが、試しに substring() で囲んでみると、連結できます。 test=# SELECT '...' || substring(pgs2snippet1(1, 100, 1, ' *', '* ', -1, 'テスト', 'テストベース') from 1 for 100) || '....'; -[ RECORD 1 ]--------------------- ?column? | ... *テスト* ベース.... PostgreSQL の問題や仕様なのか、 Ludia の問題なのか、 Senna の問題なのかわからないのですが、ここに投稿いたしました。 バージョン情報は以下のとおりです。 test=# SELECT version(), pgs2version(); -[ RECORD 1 ]----------------------------------------------------------------------------------------------------- version | PostgreSQL 8.3beta4 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3) pgs2version | ludia 1.4.0 足りない情報がありましたら、ご指摘ください。 よろしくお願いします。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From kousakadi @ nttdata.co.jp Wed Jan 9 11:35:05 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Wed, 9 Jan 2008 11:35:05 +0900 Subject: [Ludia-users 170] Re: =?iso-2022-jp?b?cGdzMnNuaXBwZXQxIBskQiROPVBOTzdrMkwkTxsoQiB8?= =?iso-2022-jp?b?fCAbJEIkSyRoJGtKODt6TnNPIjdrJCwkRyQtJEokJCEpGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78BB@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 ご報告ありがとうございます。 調査したところ、Ludiaのバグのようです。 次のバージョンのLudiaで修正します。 バグ報告は非常に助かります。 ありがとうございました。 > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf > Of ASARI Takashi > Sent: Wednesday, January 09, 2008 10:50 AM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 169]pgs2snippet1 の出力結果は || による文字列連結が できない? > > こんにちは。浅利といいます。 > > pgs2snippet1() の出力結果を連結しようとしたとき、 > (私にとっては) 不可解な挙動に遭遇しました。 > どういうことなのか知りたいと思いますので、質問させてください。 > > test=# SELECT '...' || pgs2snippet1(1, 100, 1, ' *', '* ', -1, 'テスト', > 'テストベース') || '....'; > -[ RECORD 1 ]----------------- > ?column? | ... *テスト* ベース > > || を使って文字列を連結しようとしても、右側の文字列が連結できていません。 > ところが、試しに substring() で囲んでみると、連結できます。 > > test=# SELECT '...' || substring(pgs2snippet1(1, 100, 1, ' *', '* ', > -1, 'テスト', 'テストベース') from 1 for 100) || '....'; > -[ RECORD 1 ]--------------------- > ?column? | ... *テスト* ベース.... > > PostgreSQL の問題や仕様なのか、 Ludia の問題なのか、 > Senna の問題なのかわからないのですが、ここに投稿いたしました。 > バージョン情報は以下のとおりです。 > > test=# SELECT version(), pgs2version(); > -[ RECORD 1 > ]------------------------------------------------------------- > ---------------------------------------- > version | PostgreSQL 8.3beta4 on i686-pc-linux-gnu, compiled by > GCC gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-3) > pgs2version | ludia 1.4.0 > > 足りない情報がありましたら、ご指摘ください。 > よろしくお願いします。 > > -- > ASARI Takashi @ Todai Fink Team > http://fink.sodan.ecc.u-tokyo.ac.jp/ > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > From asari @ users.sourceforge.net Wed Jan 9 12:34:54 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Wed, 9 Jan 2008 12:34:54 +0900 Subject: [Ludia-users 171] Re: =?iso-2022-jp?b?cGdzMnNuaXBwZXQxIBskQiROPVBOTzdrMkwkTxsoQiB8?= =?iso-2022-jp?b?fCAbJEIkSyRoJGtKODt6TnNPIjdrJCwkRyQtJEokJCEpGyhC?= In-Reply-To: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78BB@MAILSV11.msg.nttdata.co.jp> References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78BB@MAILSV11.msg.nttdata.co.jp> Message-ID: <5d04aefa0801081934t424aa799x35defaf46f109ae7@mail.gmail.com> 浅利です。 08/01/09 に kousakadi @ nttdata.co.jp さんは書きました: > 幸坂です。こんにちは。 > > ご報告ありがとうございます。 > 調査したところ、Ludiaのバグのようです。 > 次のバージョンのLudiaで修正します。 素早いご対応、ありがとうございます。 ついでにちょっと現在の pgs2snippet1() の利用状況を。 pgs2snippet1() は便利ですが、 配列インデックスを試用している身としては ちょっと悩ましい部分もあります。例えば、次の文は当然のようにエラーになります。 test=# SELECT pgs2snippet1(1, 10, 1, ' *', '* ', -1, 'テスト', '一致しない場合'); ERROR: pgsenna2: sen_snip_add_cond() failed 4 配列型インデックスや、おそらく普通のマルチカラムインデックスを 使っている場合、どのカラムにヒットしたのかを判定してからでないと スニペットは作成できないことになると思います。 今は CASE WHEN pgs2contain(...) THEN ... END で囲ってみています。 SELECT pid, iname, oname, CASE WHEN pgs2contain(word, ?) THEN pgs2snippet1(1, 320, 1, '', '', -1, ?, word) ELSE substring(word from 1 for 320) || ' ...' END AS kwic, pgs2getscore(ctid) AS score FROM p WHERE array[iname, oname, word] @@ ? ORDER BY score DESC LIMIT 20; 上の例では本来 iname, oname も同様に CASE ... END で 囲う必要があります。ちょっと煩雑のような気がします。 もうひとつ、マッチしていない場合のデフォルト値を 引数にとるような関数を便利かなあ、と思っています。 それでは。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From ssenou @ techno-mark.co.jp Wed Jan 9 17:10:33 2008 From: ssenou @ techno-mark.co.jp (ssenou) Date: Wed, 9 Jan 2008 17:10:33 +0900 Subject: [Ludia-users 172] =?iso-2022-jp?b?Tk9UGyRCOCE6dyRLJEQkJCRGGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> Message-ID: <004e01c85297$1bf52890$c6c8020a@vapor> 瀬能です。 お世話になります。 ■環境 Redhat Enterprise Linux 4 U5 ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9 postgresql 8.2.4 ■DB table : id int4(主キー),title varchar,data text index : fulltextb(data) ■データ id=1 title=A data=XYZ id=2 title=A data=XXX id=2 title=B data=XXX ■現象 titleが「A」且つ dataが「XXX」 では無いレコードを検索したいという場合は どういった方法がありますでしょうか? 最初「-」を利用して検索すれば出来ると思い、 data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまったので… 以上、よろしくお願いします。 From kousakadi @ nttdata.co.jp Thu Jan 10 13:59:49 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Thu, 10 Jan 2008 13:59:49 +0900 Subject: [Ludia-users 173] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyRLJEQkJCRGGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> <004e01c85297$1bf52890$c6c8020a@vapor> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C0@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX'); でいかがでしょうか? > 最初「-」を利用して検索すれば出来ると思い、 > data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまったの で… +や-を最初に持ってくることはできません。 指定しても無視されます。 > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of ssenou > Sent: Wednesday, January 09, 2008 5:11 PM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 172] NOT検索について > > 瀬能です。 > お世話になります。 > > ■環境 > Redhat Enterprise Linux 4 U5 > ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9 > postgresql 8.2.4 > > ■DB > table : id int4(主キー),title varchar,data text > index : fulltextb(data) > > ■データ > id=1 title=A data=XYZ > id=2 title=A data=XXX > id=2 title=B data=XXX > > ■現象 > > titleが「A」且つ dataが「XXX」 > では無いレコードを検索したいという場合は > どういった方法がありますでしょうか? > > 最初「-」を利用して検索すれば出来ると思い、 > data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまったの で… > > > 以上、よろしくお願いします。 > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > From ssenou @ techno-mark.co.jp Thu Jan 10 15:00:21 2008 From: ssenou @ techno-mark.co.jp (ssenou) Date: Thu, 10 Jan 2008 15:00:21 +0900 Subject: [Ludia-users 174] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyRLJEQkJCRGGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> <004e01c85297$1bf52890$c6c8020a@vapor> <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C0@MAILSV11.msg.nttdata.co.jp> Message-ID: <001701c8534e$1617eb80$c6c8020a@vapor> 瀬能です。 回答ありがとうございます。 NOT(data @@ 'XXX')で 期待して検索結果は得られたのですが、 どうもSeq Scanになってしまうようです。 ludiaのINDEXを使う形でSQLを組むとすると 何かいい方法はありますか? 以上よろしくお願いします。 ----- Original Message ----- From: To: Sent: Thursday, January 10, 2008 1:59 PM Subject: [Ludia-users 173] Re: NOT検索について > 幸坂です。こんにちは。 > > SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX'); > でいかがでしょうか? > >> 最初「-」を利用して検索すれば出来ると思い、 >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまったの > で… > +や-を最初に持ってくることはできません。 > 指定しても無視されます。 > >> -----Original Message----- >> From: ludia-users-bounces @ lists.sourceforge.jp >> [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of ssenou >> Sent: Wednesday, January 09, 2008 5:11 PM >> To: ludia-users @ lists.sourceforge.jp >> Subject: [Ludia-users 172] NOT検索について >> >> 瀬能です。 >> お世話になります。 >> >> ■環境 >> Redhat Enterprise Linux 4 U5 >> ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9 >> postgresql 8.2.4 >> >> ■DB >> table : id int4(主キー),title varchar,data text >> index : fulltextb(data) >> >> ■データ >> id=1 title=A data=XYZ >> id=2 title=A data=XXX >> id=2 title=B data=XXX >> >> ■現象 >> >> titleが「A」且つ dataが「XXX」 >> では無いレコードを検索したいという場合は >> どういった方法がありますでしょうか? >> >> 最初「-」を利用して検索すれば出来ると思い、 >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまったの > で… >> >> >> 以上、よろしくお願いします。 >> >> _______________________________________________ >> Ludia-users mailing list >> Ludia-users @ lists.sourceforge.jp >> http://lists.sourceforge.jp/mailman/listinfo/ludia-users >> > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > > From kousakadi @ nttdata.co.jp Wed Jan 16 08:49:51 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Wed, 16 Jan 2008 08:49:51 +0900 Subject: [Ludia-users 175] Re: =?iso-2022-jp?b?cGdzMnNuaXBwZXQxIBskQiROPVBOTzdrMkwkTxsoQiB8?= =?iso-2022-jp?b?fCAbJEIkSyRoJGtKODt6TnNPIjdrJCwkRyQtJEokJCEpGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com><178CD7FD87EF4B4BB23F3D0B6C201D3F048F78BB@MAILSV11.msg.nttdata.co.jp> <5d04aefa0801081934t424aa799x35defaf46f109ae7@mail.gmail.com> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C4@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 > 配列型インデックスや、おそらく普通のマルチカラムインデックスを > 使っている場合、どのカラムにヒットしたのかを判定してからでないと > スニペットは作成できないことになると思います。 確かにそうですね。 そもそもエラーを返す仕様が良くないのかもしれません。 pgs2snippet1でヒットしなかった場合は、 NULLを返したほうが良さそうです。 NULLを返す仕様の場合、 CASE WHEN pgs2contain(word, ?) THEN pgs2snippet1(1, 320, 1, '', '', -1, ?, word) ELSE substring(word from 1 for 320) ↓ COALESCE(pgs2snippet1(.....), substring(word from 1 for 320)) と書く事ができます。 NULLで返すべきか検討してみます。 > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf > Of ASARI Takashi > Sent: Wednesday, January 09, 2008 12:35 PM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 171] Re:pgs2snippet1 の出力結果は || による文字列連 結ができない? > > 浅利です。 > > 08/01/09 に kousakadi @ nttdata.co.jp さんは書きま した: > > 幸坂です。こんにちは。 > > > > ご報告ありがとうございます。 > > 調査したところ、Ludiaのバグのようです。 > > 次のバージョンのLudiaで修正します。 > > 素早いご対応、ありがとうございます。 > > ついでにちょっと現在の pgs2snippet1() の利用状況を。 > > pgs2snippet1() は便利ですが、 配列インデックスを試用している身としては > ちょっと悩ましい部分もあります。例えば、次の文は当然のようにエラーになりま す。 > > test=# SELECT pgs2snippet1(1, 10, 1, ' *', '* ', -1, 'テスト', > '一致しない場合'); > ERROR: pgsenna2: sen_snip_add_cond() failed 4 > > 配列型インデックスや、おそらく普通のマルチカラムインデックスを > 使っている場合、どのカラムにヒットしたのかを判定してからでないと > スニペットは作成できないことになると思います。 > > 今は CASE WHEN pgs2contain(...) THEN ... END で囲ってみています。 > > SELECT pid, iname, oname, > CASE WHEN pgs2contain(word, ?) THEN > pgs2snippet1(1, 320, 1, '', '', -1, ?, word) > ELSE > substring(word from 1 for 320) || ' ...' > END AS kwic, pgs2getscore(ctid) AS score FROM p > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 20; > > 上の例では本来 iname, oname も同様に CASE ... END で > 囲う必要があります。ちょっと煩雑のような気がします。 > もうひとつ、マッチしていない場合のデフォルト値を > 引数にとるような関数を便利かなあ、と思っています。 > > それでは。 > > -- > ASARI Takashi @ Todai Fink Team > http://fink.sodan.ecc.u-tokyo.ac.jp/ > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > From asari @ users.sourceforge.net Wed Jan 16 11:18:34 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Wed, 16 Jan 2008 11:18:34 +0900 Subject: [Ludia-users 176] Re: =?iso-2022-jp?b?cGdzMnNuaXBwZXQxIBskQiROPVBOTzdrMkwkTxsoQiB8?= =?iso-2022-jp?b?fCAbJEIkSyRoJGtKODt6TnNPIjdrJCwkRyQtJEokJCEpGyhC?= In-Reply-To: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C4@MAILSV11.msg.nttdata.co.jp> References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com> <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78BB@MAILSV11.msg.nttdata.co.jp> <5d04aefa0801081934t424aa799x35defaf46f109ae7@mail.gmail.com> <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C4@MAILSV11.msg.nttdata.co.jp> Message-ID: <5d04aefa0801151818v1afea32en73cdc9b3d5431574@mail.gmail.com> 浅利です。こんにちは。 ご検討、ありがとうございます。 08/01/16 に kousakadi @ nttdata.co.jp さんは書きました: > 幸坂です。こんにちは。 > > > 配列型インデックスや、おそらく普通のマルチカラムインデックスを > > 使っている場合、どのカラムにヒットしたのかを判定してからでないと > > スニペットは作成できないことになると思います。 > 確かにそうですね。 > そもそもエラーを返す仕様が良くないのかもしれません。 > pgs2snippet1でヒットしなかった場合は、 > NULLを返したほうが良さそうです。 NULL が返るのはとても自然な感じがします。賛成します。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From shohu @ kvd.biglobe.ne.jp Wed Jan 16 11:39:38 2008 From: shohu @ kvd.biglobe.ne.jp (=?iso-2022-jp?B?GyRCPj5JdyEhN0kbKEI=?=) Date: Wed, 16 Jan 2008 11:39:38 +0900 Subject: [Ludia-users 177] =?iso-2022-jp?b?GyRCOCE6dzdrMkwkTiU9ITwlSD1nJEskRCQkJEYbKEI=?= Message-ID: はじめまして、松風と申します。 現在、仕事でludiaを使用しているのですが、 検索結果のソート順について確認させて頂ければと思います。 ■確認内容 ludiaで"@@"検索した時に、先にDBに挿入したデータから検索結果 が表示される?と思われる動作を利用して、アプリを構築していま す。 ※これは必須条件とさせてください。 しかし、DBのデータ件数が数百万件を超えると、この "先にDBに挿入したデータから検索結果が表示される" の法則が使えなくなるようなので、確認させてください。 ■詳細 あるDBに、以下のように、address長さが短い順にINSERT文で入 れていきます。 ID | address ---------------------- 1 | New York 1 2 | New York 12 3 | New York 123 4 | New York 1234 : : ※ DDL CREATE TABLE tbl ( id serial primary key, txt text ); CREATE INDEX idx ON tbl USING fulltext (txt); ソート件数を以下のように1件に設定しておき、 set ludia.max_n_sort_result TO 1 上記状態において select * from tbl where txt @@ 'New'; を実行すると、 ID | txt ------------ 1 | New York 1 (1 row) のようにIDが一番小さい値(先にソートしたもの)が通常返却され ます。 しかし、これがデータ数が数百万件を挿入した後に実行すると ID | txt ------------ 79... | New York 1234.... (1 row) のように、"New York 1"ではないほかの値が返ってくるようです。 ※数十万件程度の件数であれば、"New York 1"が返ってくるようです データ数が数百万件を超えても、"New York 1"を返却するように したいため、 set ludia.max_n_sort_result TO 1000000 などとmax_n_sort_resultを大きくしたり、ORDER BY ID を指定 すると、"New York 1"を返却してくれるのですが、速度パフォー マンスが落ちてしまいます。 ■確認 データが数百万件を超える状態、 set ludia.max_n_sort_result TO 1 ORDER BY ID を指定しない の時に、"New York 1" を返却するような事はできるのでしょうか? お手数ですが、どなたかご回答頂ければ幸いです。 もし不明な点等あればご指摘ください。 宜しくお願い致します。 /*************************************************/ Postcode : Address : TEL : Name : 松風 敬 Mail : shohu @ kvd.biglobe.ne.jp Blog : http://d.hatena.ne.jp/shohu33/ /*************************************************/ From kousakadi @ nttdata.co.jp Wed Jan 16 13:46:34 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Wed, 16 Jan 2008 13:46:34 +0900 Subject: [Ludia-users 178] Re: =?iso-2022-jp?b?Tk9UGyRCOCE6dyRLJEQkJCRGGyhC?= References: <5d04aefa0801081749o3bfa18cvd6e0b3d35959965b@mail.gmail.com><004e01c85297$1bf52890$c6c8020a@vapor><178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C0@MAILSV11.msg.nttdata.co.jp> <001701c8534e$1617eb80$c6c8020a@vapor> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78C8@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 >> SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX'); このクエリの場合、title列をインデックススキャンした後、 data列でフィルタ(シーケンシャルスキャン)するプランになるかと思います。 一度インデックススキャンしているので、あまり遅くないと思いますが いかがでしょうか? どうしてもseq scanを避けたい場合、以下のクエリでどうでしょう?  SELECT id FROM tab WHERE title @@ 'A'  EXCEPT  SELECT id FROM tab WHERE data @@ 'XXX'; EXCEPTで行の比較をしているため、逆に遅くなる可能性があります・・・。 もしくは、以下のように副問い合わせを用いた方法もあります。  SELECT * FROM tab WHERE title @@ 'A' AND id NOT IN  (SELECT id FROM tab WHERE data @@ 'XXX'); いろいろ試してみてください。 > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of ssenou > Sent: Thursday, January 10, 2008 3:00 PM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 174] Re: NOT検索について > > 瀬能です。 > 回答ありがとうございます。 > > NOT(data @@ 'XXX')で > 期待して検索結果は得られたのですが、 > どうもSeq Scanになってしまうようです。 > > ludiaのINDEXを使う形でSQLを組むとすると > 何かいい方法はありますか? > > 以上よろしくお願いします。 > > ----- Original Message ----- > From: > To: > Sent: Thursday, January 10, 2008 1:59 PM > Subject: [Ludia-users 173] Re: NOT検索について > > > > 幸坂です。こんにちは。 > > > > SELECT * FROM tab WHERE title @@ 'A' AND NOT(data @@ 'XXX'); > > でいかがでしょうか? > > > >> 最初「-」を利用して検索すれば出来ると思い、 > >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまった の > > で… > > +や-を最初に持ってくることはできません。 > > 指定しても無視されます。 > > > >> -----Original Message----- > >> From: ludia-users-bounces @ lists.sourceforge.jp > >> [mailto:ludia-users-bounces @ lists.sourceforge.jp] On > Behalf Of ssenou > >> Sent: Wednesday, January 09, 2008 5:11 PM > >> To: ludia-users @ lists.sourceforge.jp > >> Subject: [Ludia-users 172] NOT検索について > >> > >> 瀬能です。 > >> お世話になります。 > >> > >> ■環境 > >> Redhat Enterprise Linux 4 U5 > >> ludia 1.4.0 (mecab-0.96 ipadic-2.7.0 senna-1.0.9 > >> postgresql 8.2.4 > >> > >> ■DB > >> table : id int4(主キー),title varchar,data text > >> index : fulltextb(data) > >> > >> ■データ > >> id=1 title=A data=XYZ > >> id=2 title=A data=XXX > >> id=2 title=B data=XXX > >> > >> ■現象 > >> > >> titleが「A」且つ dataが「XXX」 > >> では無いレコードを検索したいという場合は > >> どういった方法がありますでしょうか? > >> > >> 最初「-」を利用して検索すれば出来ると思い、 > >> data @@ '-XXX'を実行してみると逆にdataが「XXX」の物がヒットしてしまった の > > で… > >> > >> > >> 以上、よろしくお願いします。 > >> > >> _______________________________________________ > >> Ludia-users mailing list > >> Ludia-users @ lists.sourceforge.jp > >> http://lists.sourceforge.jp/mailman/listinfo/ludia-users > >> > > > > _______________________________________________ > > Ludia-users mailing list > > Ludia-users @ lists.sourceforge.jp > > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > > > > > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > From asari @ users.sourceforge.net Fri Jan 18 07:14:13 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Fri, 18 Jan 2008 07:14:13 +0900 Subject: [Ludia-users 179] =?iso-2022-jp?b?GyRCR1tOcyROOCE6dyRHGyhCIHNlcnZlciBwcm9jZXNzIHdh?= =?iso-2022-jp?b?cyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAxMQ==?= Message-ID: <5d04aefa0801171414n3ae1e379k5c4039819ae0adfb@mail.gmail.com> おはようございます。浅利といいます。 PostgreSQL 8.2.5 + Ludia 1.4.0 で、配列型インデックスを使っています。 おおむね次のような CREATE 文のテーブルとインデックスを作っています。 割とどうでもいいケースですが、望まない挙動がありましたのでご報告します。 CREATE TABLE names (id1 text, id2 text, iname text, oname text, word text) ALTER TABLE names ADD PRIMARY KEY (id1, id2) CREATE INDEX fulltxt_idx ON names USING fulltexta((array[iname, oname, word])) = ひとつめ = このテーブルに対して、次のような SQL 文は正常に実行されます。 SELECT * FROM names WHERE array[iname, oname, word] @@ ? 一方、次のような SQL 文を実行すると、 SELECT * FROM names WHERE array[oname, iname, word] @@ ? 次のようなエラーが出て接続が切れてしまいます。 server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Failed. サーバのログには以下のようなログが残されていました。 DEBUG: pgsenna2: logger_info_set. DEBUG: pgsenna2: pgs2contain 5094823 -1 LOG: server process (PID 28477) was terminated by signal 11 LOG: terminating any other active server processes ludia.enable_seqscan = off で (おそらく正しく) エラーを返しました。 ERROR: pgsenna2: sequencial scan disabled = ふたつめ = 次の文の ? を適当な名前 ('山田' など) に置き換えたものは正常に結果を返します。 SELECT pgs2contain(iname, ?), pgs2contain(oname, ?), pgs2contain(word, ?), pgs2getscore(ctid) AS score FROM names WHERE array[iname, oname, word] @@ ? ORDER BY score DESC LIMIT 1 一方、次の文は '山田', '中津川', '佐藤' で成功し、 '古川', '菅原' で成功しませんでした。 上記と同様、エラーが出て接続が切れてしまいます。 SELECT pgs2contain(oname, ?), pgs2contain(iname, ?), pgs2contain(word, ?), pgs2getscore(ctid) AS score FROM names WHERE array[iname, oname, word] @@ ? ORDER BY score DESC LIMIT 1 pgs2getscore() を使わないようにすると、エラーはなくなります。 また、こちらは ludia.enable_seqscan = off は影響しませんでした。 REINDEX を試してみましたが、依然エラーは出ています。 ( もしかするとエラーが起こるクエリには変化があったかもしれません。 ) 以上二点、原因が同じかどうかわかりませんが。それにレアケースと思いますが。 何かのお役に立てば幸いです。よろしくお願いいたします。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From kousakadi @ nttdata.co.jp Fri Jan 18 09:43:22 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Fri, 18 Jan 2008 09:43:22 +0900 Subject: [Ludia-users 180] Re: =?iso-2022-jp?b?GyRCOCE6dzdrMkwkTiU9ITwlSD1nJEskRCQkJEYbKEI=?= References: Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78CF@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 > ludiaで"@@"検索した時に、先にDBに挿入したデータから検索結果 > が表示される?と思われる動作を利用して、アプリを構築していま > す。 上記の動作を利用してアプリを構築すると、Ludia以外でも問題が起きそうで す・・・。 RDBMSは行の順番を全く保証しないので。 http://www.postgresql.jp/document/pg826doc/html/tutorial-concepts.html > データが数百万件を超える状態、 > set ludia.max_n_sort_result TO 1 > ORDER BY ID を指定しない > の時に、"New York 1" を返却するような事はできるのでしょうか? 残念ながらできません。 ある程度インデックスが大きくなると、 インデックス内部で配置換えが行われるため、 松風さんのような事象が起きていると考えられます。 # このMLはWeb公開されています。 # http://lists.sourceforge.jp/mailman/archives/ludia-users/ # 住所などが晒されていますが大丈夫ですか? > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of 松風 敬 > Sent: Wednesday, January 16, 2008 11:40 AM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 177]検索結果のソート順について > > はじめまして、松風と申します。 > > 現在、仕事でludiaを使用しているのですが、 > 検索結果のソート順について確認させて頂ければと思います。 > > ■確認内容 > > ludiaで"@@"検索した時に、先にDBに挿入したデータから検索結果 > が表示される?と思われる動作を利用して、アプリを構築していま > す。 > ※これは必須条件とさせてください。 > > しかし、DBのデータ件数が数百万件を超えると、この > > "先にDBに挿入したデータから検索結果が表示される" > > の法則が使えなくなるようなので、確認させてください。 > > ■詳細 > > あるDBに、以下のように、address長さが短い順にINSERT文で入 > れていきます。 > > ID | address > ---------------------- > 1 | New York 1 > 2 | New York 12 > 3 | New York 123 > 4 | New York 1234 > : > : > > ※ DDL > CREATE TABLE tbl ( > id serial primary key, > txt text > ); > CREATE INDEX idx ON tbl USING fulltext (txt); > > ソート件数を以下のように1件に設定しておき、 > > set ludia.max_n_sort_result TO 1 > > 上記状態において > > select * from tbl where txt @@ 'New'; > > を実行すると、 > > ID | txt > ------------ > 1 | New York 1 > (1 row) > > のようにIDが一番小さい値(先にソートしたもの)が通常返却され > ます。 > > しかし、これがデータ数が数百万件を挿入した後に実行すると > > ID | txt > ------------ > 79... | New York 1234.... > (1 row) > > のように、"New York 1"ではないほかの値が返ってくるようです。 > ※数十万件程度の件数であれば、"New York 1"が返ってくるようです > > データ数が数百万件を超えても、"New York 1"を返却するように > したいため、 > > set ludia.max_n_sort_result TO 1000000 > > などとmax_n_sort_resultを大きくしたり、ORDER BY ID を指定 > すると、"New York 1"を返却してくれるのですが、速度パフォー > マンスが落ちてしまいます。 > > ■確認 > > データが数百万件を超える状態、 > set ludia.max_n_sort_result TO 1 > ORDER BY ID を指定しない > > の時に、"New York 1" を返却するような事はできるのでしょうか? > > お手数ですが、どなたかご回答頂ければ幸いです。 > もし不明な点等あればご指摘ください。 > > 宜しくお願い致します。 From kousakadi @ nttdata.co.jp Fri Jan 18 17:06:34 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Fri, 18 Jan 2008 17:06:34 +0900 Subject: [Ludia-users 181] Re: =?iso-2022-jp?b?GyRCR1tOcyROOCE6dyRHGyhCIHNlcnZlciBwcm9jZXNz?= =?iso-2022-jp?b?IHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAxMQ==?= References: <5d04aefa0801171414n3ae1e379k5c4039819ae0adfb@mail.gmail.com> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78D1@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 ご報告ありがとうございます。 > = ひとつめ = Ludia1.4.0では、配列の要素にnullが含まれていると、 配列型インデックスが正常に動作しません。 (次のバージョンではnullにも対応する予定です。) iname,oname,wordのいずれかに、nullが含まれていませんか? > = ふたつめ = ludia.max_n_sort_resultはどうなっていますか? READMEに記述されているように、ludia.max_n_sort_resultを -1に設定すると、スコアの取得ができません。 > CREATE TABLE names (id1 text, id2 text, iname text, oname テーブル名として使っているnamesはPostgreSQLの予約語なので、 避けた方が良いですね。 > -----Original Message----- > From: ludia-users-bounces @ lists.sourceforge.jp > [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf > Of ASARI Takashi > Sent: Friday, January 18, 2008 7:14 AM > To: ludia-users @ lists.sourceforge.jp > Subject: [Ludia-users 179]配列の検索で server process was > terminated by signal 11 > > おはようございます。浅利といいます。 > > PostgreSQL 8.2.5 + Ludia 1.4.0 で、配列型インデックスを使っています。 > おおむね次のような CREATE 文のテーブルとインデックスを作っています。 > 割とどうでもいいケースですが、望まない挙動がありましたのでご報告します。 > > CREATE TABLE names (id1 text, id2 text, iname text, oname > text, word text) > ALTER TABLE names ADD PRIMARY KEY (id1, id2) > CREATE INDEX fulltxt_idx ON names USING > fulltexta((array[iname, oname, word])) > > = ひとつめ = > > このテーブルに対して、次のような SQL 文は正常に実行されます。 > > SELECT * FROM names WHERE array[iname, oname, word] @@ ? > > 一方、次のような SQL 文を実行すると、 > > SELECT * FROM names WHERE array[oname, iname, word] @@ ? > > 次のようなエラーが出て接続が切れてしまいます。 > > server closed the connection unexpectedly > This probably means the server terminated abnormally > before or while processing the request. > The connection to the server was lost. Attempting reset: Failed. > > サーバのログには以下のようなログが残されていました。 > > DEBUG: pgsenna2: logger_info_set. > DEBUG: pgsenna2: pgs2contain 5094823 -1 > LOG: server process (PID 28477) was terminated by signal 11 > LOG: terminating any other active server processes > > ludia.enable_seqscan = off で (おそらく正しく) エラーを返しました。 > > ERROR: pgsenna2: sequencial scan disabled > > > = ふたつめ = > > 次の文の ? を適当な名前 ('山田' など) に置き換えたものは正常に結果を返しま す。 > > SELECT > pgs2contain(iname, ?), > pgs2contain(oname, ?), > pgs2contain(word, ?), > pgs2getscore(ctid) AS score > FROM names > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 1 > > 一方、次の文は '山田', '中津川', '佐藤' で成功し、 '古川', '菅原' で成功し ませんでした。 > 上記と同様、エラーが出て接続が切れてしまいます。 > > SELECT > pgs2contain(oname, ?), > pgs2contain(iname, ?), > pgs2contain(word, ?), > pgs2getscore(ctid) AS score > FROM names > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 1 > > pgs2getscore() を使わないようにすると、エラーはなくなります。 > また、こちらは ludia.enable_seqscan = off は影響しませんでした。 > REINDEX を試してみましたが、依然エラーは出ています。 > ( もしかするとエラーが起こるクエリには変化があったかもしれません。 ) > > > 以上二点、原因が同じかどうかわかりませんが。それにレアケースと思いますが。 > 何かのお役に立てば幸いです。よろしくお願いいたします。 > > -- > ASARI Takashi @ Todai Fink Team > http://fink.sodan.ecc.u-tokyo.ac.jp/ > > _______________________________________________ > Ludia-users mailing list > Ludia-users @ lists.sourceforge.jp > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > From asari @ users.sourceforge.net Fri Jan 18 20:57:48 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Fri, 18 Jan 2008 20:57:48 +0900 Subject: [Ludia-users 182] Re: =?iso-2022-jp?b?GyRCR1tOcyROOCE6dyRHGyhCIHNlcnZlciBwcm9jZXNz?= =?iso-2022-jp?b?IHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAxMQ==?= In-Reply-To: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78D1@MAILSV11.msg.nttdata.co.jp> References: <5d04aefa0801171414n3ae1e379k5c4039819ae0adfb@mail.gmail.com> <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78D1@MAILSV11.msg.nttdata.co.jp> Message-ID: <5d04aefa0801180357g1dd6dafeo936f548e85bc338a@mail.gmail.com> 浅利です。こんにちは。 ご対応ありがとうございます。 08/01/18 に kousakadi @ nttdata.co.jp さんは書きました: > > = ひとつめ = > Ludia1.4.0では、配列の要素にnullが含まれていると、 > 配列型インデックスが正常に動作しません。 > (次のバージョンではnullにも対応する予定です。) > iname,oname,wordのいずれかに、nullが含まれていませんか? NULL は無いようです。 SELECT COUNT(*) FROM names WHERE oname IS NULL OR iname IS NULL OR word IS NULL; count ------- 0 (1 row) > > = ふたつめ = > ludia.max_n_sort_resultはどうなっていますか? > READMEに記述されているように、ludia.max_n_sort_resultを > -1に設定すると、スコアの取得ができません。 ludia.max_n_sort_result は 10000 に設定されているようです。 SELECT * FROM pgs2getoption(); -[ RECORD 1 ]------+------ max_n_sort_result | 10000 enable_seqscan | off seqscan_flags | 1 sen_index_flags | 31 max_n_index_cache | 16 initial_n_segments | 512 > > CREATE TABLE names (id1 text, id2 text, iname text, oname > テーブル名として使っているnamesはPostgreSQLの予約語なので、 > 避けた方が良いですね。 気づいていませんでした。気をつけます。 実際に使っているテーブル名では、 もう少し違う名前です (xxxx_xxxxx_01 のような) 。 簡単に再現できるようなセットを準備できればよかったのですが、 なかなかできませんでした。すいません…。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From shoeu @ naver.com Wed Jan 23 10:07:29 2008 From: shoeu @ naver.com (=?UTF-8?B?7KCV7J6s7ZWc?=) Date: Wed, 23 Jan 2008 10:07:29 +0900 Subject: [Ludia-users 183] =?utf-8?b?44CMbHVkaWEubWF4X25faW5kZXhfY2FjaGXjgavplqLjgZnjgos=?= =?utf-8?b?44CN6LOq5ZWP44Gn44GZ44CC?= Message-ID: <34785ca468936a059130f4c070da5313@i61827> こんにちは。shoeuといいます。 ※ludia設定 ludia.sen_index_flags = 16 ludia.max_n_index_cache = 16 ludia.initial_n_segments = 512 上記の設定によって生成されたindexサイズが1GByteである場合、index cacheサイ ズの計算方法はどうなりますか。 そして、テーブルパーティショングを実施して、すべてのテーブルに対して検索を行 う場合、index cacheサイズの合計が物理的メモリサイズより少なければならないで しょうか。 よろしくお願いします。 jx? "S?H" ?? -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B... URL: http://lists.sourceforge.jp/mailman/archives/ludia-users/attachments/20080123/0c3cbe14/attachment.htm From kousakadi @ nttdata.co.jp Thu Jan 24 10:01:02 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Thu, 24 Jan 2008 10:01:02 +0900 Subject: [Ludia-users 184] Re: =?iso-2022-jp?b?GyRCIVYbKEJsdWRpYS5tYXhfbl9pbmRleF9jYWNoZQ==?= =?iso-2022-jp?b?GyRCJEs0WCQ5JGshVzxBTGQkRyQ5ISMbKEI=?= References: <34785ca468936a059130f4c070da5313@i61827> Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78DD@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 indexは、*.SEN.l, *.SEN.i, *.SEN, *.SEN.i.cの4つで一組となります。 cacheされるインデックスは*.SEN.l, *.SEN.i, *.SENの3つです。 > 上記の設定によって生成されたindexサイズが1GByteである場合、index cacheサ イ > ズの計算方法はどうなりますか。 *.SEN.l, *.SEN.i, *.SENのファイルサイズを調べてみてください。 > そして、テーブルパーティショングを実施して、すべてのテーブルに対して検索を 行 > う場合、index cacheサイズの合計が物理的メモリサイズより少なければならない で > しょうか。 *.SEN.l, *.SEN.i, *.SENと、それ以外に使用しているソフトウェアの使用メモリ が、 物理メモリサイズを超えないように調整する必要があります。 また、一時的にメモリを多めに使う時があるので、余裕を持たせた方が良いです。 Ludia-usersMLでは、メモリについての話題は何回か上がっているので、 Ludia-users保存書庫に目を通しておくと良いと思います。 Ludia-users保存書庫 http://lists.sourceforge.jp/mailman/archives/ludia-users/ [Ludia-users 111],[Ludia-users 139]などがメモリの話題です。 ________________________________ From: ludia-users-bounces @ lists.sourceforge.jp [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of ??? Sent: Wednesday, January 23, 2008 10:07 AM To: ludia-users @ lists.sourceforge.jp Subject: [Ludia-users 183]「ludia.max_n_index_cacheに関する」質問で す。 こんにちは。shoeuといいます。 ※ludia設定 ludia.sen_index_flags = 16 ludia.max_n_index_cache = 16 ludia.initial_n_segments = 512 上記の設定によって生成されたindexサイズが1GByteである場合、index cacheサイ ズの計算方法はどうなりますか。 そして、テーブルパーティショングを実施して、すべてのテーブルに対して 検索を行 う場合、index cacheサイズの合計が物理的メモリサイズより少なければな らないで しょうか。 よろしくお願いします。 From asari @ users.sourceforge.net Thu Jan 24 11:38:10 2008 From: asari @ users.sourceforge.net (ASARI Takashi) Date: Thu, 24 Jan 2008 11:38:10 +0900 Subject: [Ludia-users 185] Re: =?iso-2022-jp?b?GyRCR1tOcyROOCE6dyRHGyhCIHNlcnZlciBwcm9jZXNz?= =?iso-2022-jp?b?IHdhcyB0ZXJtaW5hdGVkIGJ5IHNpZ25hbCAxMQ==?= In-Reply-To: <5d04aefa0801171414n3ae1e379k5c4039819ae0adfb@mail.gmail.com> References: <5d04aefa0801171414n3ae1e379k5c4039819ae0adfb@mail.gmail.com> Message-ID: <5d04aefa0801231838r1600c9f5k7fa9688cb0e29126@mail.gmail.com> こんにちは。浅利です。 以前の私のメールに対して訂正・補足いたします。 08/01/18 に ASARI Takashi さんは書きました: > 一方、次の文は '山田', '中津川', '佐藤' で成功し、 '古川', '菅原' で成功しませんでした。 > 上記と同様、エラーが出て接続が切れてしまいます。 > > SELECT > pgs2contain(oname, ?), > pgs2contain(iname, ?), > pgs2contain(word, ?), > pgs2getscore(ctid) AS score > FROM names > WHERE array[iname, oname, word] @@ ? > ORDER BY score DESC LIMIT 1 > > pgs2getscore() を使わないようにすると、エラーはなくなります。 > また、こちらは ludia.enable_seqscan = off は影響しませんでした。 訂正させてください。 pgs2getscore() を使ってもエラーが起こるケースがあるようです。 結局、 pgs2contain() を使うのがいけないのか、インデックスが壊れているのか、 何か単純な設定や操作のミスなのか、切り分けができていない状態です。 pgs2contain() を strpos() で代用してしばらく動かしてみます…。 余裕ができたら PostgreSQL 8.3.x も使ってみたいです。 失礼いたします。 -- ASARI Takashi @ Todai Fink Team http://fink.sodan.ecc.u-tokyo.ac.jp/ From shoeu @ naver.com Fri Jan 25 16:44:49 2008 From: shoeu @ naver.com (=?UTF-8?B?c2hvZXU=?=) Date: Fri, 25 Jan 2008 16:44:49 +0900 Subject: [Ludia-users 186] =?utf-8?b?bHVkaWEubWF4X25faW5kZXhfY2FjaGXjgavplqLjgZnjgovjgZku?= =?utf-8?b?Li4=?= Message-ID: こんにちは。shoeuといいます。 物理的メモリが1Gのサーバ上でテーブルパーティショニングを実施し、80個の末端 テーブルを生成します。それから、INITIAL_N_SEGMENTの値を512に設定した後、それ ぞれのテーブルにインデックスを生成して、約730,000件のドキュメント(全体 6,5G)を各テーブルに分割してinsertした結果、生成されたインデックスファイルサ イズの合計は以下のようです。 *.SEN 18MByte *.SEN.i 9GByte *.SEN.l 568MByte *.SEN.i.c 1.1GByte この状態で、MAX_N_INDEX_CACHEの値を100に修正後、全体テーブルに対して検索を実 施したら、不思議ながら検索ができました。(80個のインデックスキャッシュが生成 されました。) *.SEN + *.SEN.i + *.SEN.l = 9586MByteという結果になりましが。1Gのメモリ上で どうやって対応できるなのか気になります。 宜しくお願い致します。 -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B... URL: http://lists.sourceforge.jp/mailman/archives/ludia-users/attachments/20080125/8e432e5d/attachment.htm From kousakadi @ nttdata.co.jp Mon Jan 28 09:29:56 2008 From: kousakadi @ nttdata.co.jp (kousakadi @ nttdata.co.jp) Date: Mon, 28 Jan 2008 09:29:56 +0900 Subject: [Ludia-users 187] Re: =?iso-2022-jp?b?bHVkaWEubWF4X25faW5kZXhfY2FjaGUbJEIkSzRYGyhC?= =?iso-2022-jp?b?GyRCJDkkayQ5GyhCLi4u?= References: Message-ID: <178CD7FD87EF4B4BB23F3D0B6C201D3F048F78E6@MAILSV11.msg.nttdata.co.jp> 幸坂です。こんにちは。 80個ってすごいですね。 > *.SEN + *.SEN.i + *.SEN.l = 9586MByteという結果になりましが。1Gのメモリ上 で > どうやって対応できるなのか気になります。 使い始めは問題ないと思いますが、使用メモリは9586Mbyteまで増え続けます。 使用メモリが1Gbyteを超えたあたりで、スラッシングが起きて遅くなり、 使用メモリが2Gbyteを超えたあたりで落ちます・・・。(32bitOSの場合) ludia.initial_n_segmentsを下げれば *.SEN.i は小さくなりますが、 *.SEN.l は小さくなりません。 「パーティショニングをしない、もしくはパーティション数を一桁にする」 という方法を取るのが良いかと思われます。 物理メモリが1Gbyteという事ですので、 他のソフトウェアもメモリを使用すると考えて、 *.SEN + *.SEN.i + *.SEN.l の合計が512Mbyte以下になるように、 パーティション数とludia.initial_n_segmentsを調整してみたらどうでしょうか。 ________________________________ From: ludia-users-bounces @ lists.sourceforge.jp [mailto:ludia-users-bounces @ lists.sourceforge.jp] On Behalf Of shoeu Sent: Friday, January 25, 2008 4:45 PM To: ludia-users @ lists.sourceforge.jp Subject: [Ludia-users 186]ludia.max_n_index_cacheに関するす... こんにちは。shoeuといいます。 物理的メモリが1Gのサーバ上でテーブルパーティショニングを実施し、80 個の末端 テーブルを生成します。それから、INITIAL_N_SEGMENTの値を512に設定した 後、それ ぞれのテーブルにインデックスを生成して、約730,000件のドキュメント (全体 6,5G)を各テーブルに分割してinsertした結果、生成されたインデックス ファイルサ イズの合計は以下のようです。 *.SEN 18MByte *.SEN.i 9GByte *.SEN.l 568MByte *.SEN.i.c 1.1GByte この状態で、MAX_N_INDEX_CACHEの値を100に修正後、全体テーブルに対して 検索を実 施したら、不思議ながら検索ができました。(80個のインデックスキャッ シュが生成 されました。) *.SEN + *.SEN.i + *.SEN.l = 9586MByteという結果になりましが。1Gのメ モリ上で どうやって対応できるなのか気になります。 宜しくお願い致します。