LoginSignup
3
1

More than 5 years have passed since last update.

ElasticSearchの正規表現検索が意図に沿わなかった

Posted at

ElasticSearchでワイルドカード検索がしたい!
という顧客要望に応えるため、何とかできないか試したときのメモ。

結論

データ型がkeywordのフィールドに対しては、正規表現検索は有効。
データ型がtextのフィールドに対しては、意図に沿わないことが多い。

原因

データ型がkeywordはアナライザによる単語分割が行われないため、目的の単語がヒットしやすい。
データ型がtextのフィールドは文字数分割が行われ、かつ、ワイルドカードを使用した場合は「A * B」で一単語と判断するので、
分割文字単位より長い単語をヒットさせることができない。
(むしろワイルドカード使用しなければ、「A」と「B」で分割されるため、目的の単語をヒットできる)

例)

アナライザ(ngram)の最小文字単位が2、最大文字単位が10でかつ、
「使用済自動車の再資源化等に関する法律」を検索したい場合

検索ワード
「自動車法律」はヒットする。
「自動車*法律」はヒットしない。(自動車から法律まで15文字)
「使用済*再資源」はヒットする。(使用済から再資源まで10文字)
「使用済*再資源化」はヒットしない。(使用済から再資源化まで11文字)
「済*再資源化」はヒットする。(済から再資源化まで9文字)

備考

データ型がkeywordは完全一致を目的としたフィールドにすべきだと思うし、
データ型がtextに対して、正規表現やワイルドカード検索しようとすることがイケてないと思う。

正規表現検索が性能劣化するという記事しか見かけなかったから、仕様上もできると思ってた。

設定すれば何とかなるかもしれないけど、そもそも全文検索の思想上、ElasticSearchの持ち味活かしつつ正規表現検索ってできるのかな…?

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1