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

Junichi Ito [E-MAIL ADDRESS DELETED]
2011年 7月 9日 (土) 09:31:42 JST


jfluteさん、ご回答ありがとうございます。

なるほど、確かに色々と考慮点がありますね。
現在の私のニーズからいうと、「検索用カラム」を作成しておくべきだったんですが、
今からスキーマを変更するのも手間だなあと思って、DBFlute.NETでさくっと検索する方法を
質問させてもらいました (^ ^;;

また会社の同僚とどうするか検討させてもらいます。


伊藤

2011年7月9日2:39 kubo <[E-MAIL ADDRESS DELETED]>:
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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