[seasar-dotnet:2073] Re: DBFlute.NET: 大文字小文字を区別しない検索

kubo [E-MAIL ADDRESS DELETED]
2011年 7月 9日 (土) 02:39:14 JST


jfluteです。

伊藤さん、こんばんは

自分の経験だと、大文字小文字を区別したくない検索の場合、
そもそも「あ」と「ア」なども吸収したいという要件が
同時に入り、結局は全文検索を使うってことが多かったです。
(アルファベットだけ吸収してもって感じで)

PostgreSQLならLudia、OracleならOracle Text、
MySQLならTritton、もしくは、自前N-gram、
それ以外でも、有料の検索エンジン。

PostgreSQLに ilike という演算子がありますが、
ConditionBeanではJava版だけで利用することができますが、
同じ理由で少なくとも日本だとあまり需要がない印象です。

あとは、DBMSによってはそもそもデフォルトで
大文字小文字を区別しないものもあったり(SQLServer)、
Collation の設定でそのように設定できたりと(MySQL)、
DB側の設定で吸収されることが多かったです。

また、そういう状況でない場合は、
左辺に関数を使うとインデックスが利用されないので、
(そして関数インデックスをサポートしているDBは少ないので)
あらかじめ「検索条件用カラム」を作成しておいて、
検索条件の値に、そのカラムの値を作成するときに利用した
変換ロジックを適用させて検索することがありました。
(更新時にズレが発生しないように気をつける)

検索条件値 = "Writing Effective Use Cases"
変換した値 = "WRITING EFFECTIVE USE CASES"

SELECT *
FROM book
WHERE
  book_search_name = 'WRITING EFFECTIVE USE CASES'

※実際には、半角カナを全角にしたりとか色々やりましたが

で、そういう感じでなくとにかくSQL上でシンプルに
吸収したいというのであれば、つまり、
「UPPER(book_name) = UPPER('Extreme Programming')」
というSQLを発行させたいというのであれば、
外だしSQLになります。

2011/7/8 Junichi Ito <[E-MAIL ADDRESS DELETED]>:
> みなさんこんばんは、伊藤といいます。
>
> すみませんが、サンプルプロジェクトを見ても分からなかったので教えてください。
> DBFlute.NETで大文字小文字を区別しない検索を実現する一番スマートなやり方ってどうなりますか?
> SQLでいうとこんな感じです。
>
> SELECT *
> FROM book
> WHERE
> UPPER(book_name) = UPPER('Extreme Programming')
>
> どなたかご存知の方がおられれば教えてください。
> よろしくお願いします。
>
> 伊藤
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内