Laboratory of Mobile Agricultural Chemicals Searcher
携帯農薬検索実験室

研究会

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
60 / 114 ツリー <前へ | 次へ>

〔495〕ACFinder 060920版 kabe (06/09/20 23:45)

〔502〕Re:病害虫タブ(MATCH演算子)の不具合 Hidemi Oya (06/09/26 23:10)
〔503〕Re:病害虫タブ(MATCH演算子)の不具合 Hidemi Oya (06/09/27 0:24)
〔504〕Re:病害虫タブ(MATCH演算子)の不具合 Hidemi Oya (06/09/27 21:44)

〔502〕Re:病害虫タブ(MATCH演算子)の不具合
 Hidemi Oya WEB  (06/09/26 23:10)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

>MATCHを使った場合、なぜか「トマトサビダニ」が出てきません。
>MATCH '%ハモグリ%' では「イネハモグリバエ」「トマトハモグリバエ」が出てきません。
 「イネ○○」は「%シンガレセンチュウ%」とかでもダメですね。「%センチュウ%」なら「イネシンガレセンチュウ」は出ますが…。
 「イネ」「トマト」のほかに、「シスト」「コブ」「、」に検索語が続くとやはりダメですね。

>原因わかりますか?
 う〜ん、特定の文字列だけ漏れてしまうってのは、理解に苦しみます。私のプログラム側の問題なら全てのパターンでダメになるはずなので、Ddelphi の UTF か Ansi 系ライブラリ、あるいは Windows の LCMAP 系 API の問題かもしれません。が、そうだとすると対策はちょっとやっかいで、簡単には対応できないかも…。
 改善は検討しますが、時間がかかりそうなので、当面
 MATCH '%pattern%'
の代わりに
 REGEXP 'pattern'
をお使いください。'%pattern' は 'pattern$'、'pattern%' は '^pattern'、'pattern' は '^pattern$' です。現在は REGEXP が速度向上しているので、単純パターンなら MATCH と検索時間は変わりません(LIKE に比べると遅いですが、単純パターンなら待ち時間は1〜2秒だと思います)。

〔503〕Re:病害虫タブ(MATCH演算子)の不具合
 Hidemi Oya WEB  (06/09/27 0:24)

引用なし
   kabe さん、こん**は。Hidemi Oya です。

> う〜ん、特定の文字列だけ漏れてしまうってのは、理解に苦しみます。私のプログラム側の問題なら全てのパターンでダメになるはずなので、Ddelphi の UTF か Ansi 系ライブラリ、あるいは Windows の LCMAP 系 API の問題かもしれません。
 AnsiPos で文字列検索してるのに、UTF8 エンコードの文字列を渡してました。エンコード間違いという、実に基本的なミスですね(^_^;)。
 対策コードでは、余分な AnsiToUtf8 変換が減ったので、ほんのわずかですが検索速度も上がってます。

〔504〕Re:病害虫タブ(MATCH演算子)の不具合
 Hidemi Oya WEB  (06/09/27 21:44)

引用なし
   自己レスです。

> AnsiPos で文字列検索してるのに、UTF8 エンコードの文字列を渡してました。エンコード間違いという、実に基本的なミスですね(^_^;)。
 だんだん思い出してきました。これ、本来は UTF8 エンコードの文字列を Pos 関数で検索するように作ってありました。おそらく、SQLite コンポーネントを作ったときに、勘違いして AnsiPos に書き換えてしまったのではないかと思います。
 ま、おかげで MATCH 演算子がほんのわずかとはいえ速度が上がったので、怪我の巧妙ともいえますが(^_^;)。

 話は変わって、MATCH, REGEXP の高速化について。
 前々から思ってはいたのですが、検索パターンが定数の場合、これを事前に正規化するプリプロセッサ関数を実装すれば、今よりも高速化できるのではないかと考えています。現在は、検索パターンが式の場合を考慮して、検索する側も検索される側も毎回正規化しています。が、検索パターンは定数のことが多いので、プリプロセッサ関数で最初に正規化してやれば、SQL 実行中は検索される側だけ正規化すればすみますから、文字列正規化ルーチンを呼び出す回数は半分ですみます。

  ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索  
60 / 114 ツリー <前へ | 次へ>
ページ:  ┃  記事番号:   
(SS)C-BOARD vv3.8 is Free.