クエリの複数形に問題があります。私が必要としているのは、rubyのメソッド、または検索時に役立つSQLです。例えば:
「配列」を検索すると、「配列」の結果も返されるようにします。
ありがとう
クエリの複数形に問題があります。私が必要としているのは、rubyのメソッド、または検索時に役立つSQLです。例えば:
「配列」を検索すると、「配列」の結果も返されるようにします。
ありがとう
あなたが探しているのは単語ステミングです。
たくさんの正規表現を使って英語のような言語のステミングを実際に行うことはできません。例外が多すぎます。大きなステミング辞書が必要です。
PostgreSQL の全文検索はそのような辞書を提供しており、この仕事には全文検索を使用することを強くお勧めします:
regress=# WITH vals(a,b) AS (VALUES ('goose','geese'), ('query','queries'), ('arrays','array'))
SELECT to_tsquery(a), to_tsvector(b), to_tsquery(a) @@ to_tsvector(b) FROM vals;
to_tsquery | to_tsvector | ?column?
------------+-------------+----------
'goos' | 'gees':1 | f
'queri' | 'queri':1 | t
'array' | 'array':1 | t
(3 rows)
ただし、ステミング ディクショナリは完全ではないことに気付くでしょう。「ガチョウ」を検索すると「ガチョウ」と一致すると思いますが、一致しませんでした。辞書を拡張する必要がある場合があります。PostgreSQL のディクショナリは、ステミングについて少し熱狂的である場合もあります。
別の方法は、Apache Solr のような、より大規模でカスタマイズが容易なツールを使用することです。
Postgres 全文検索を使用する場合は、こことここで概説されているように、辞書を変更できます。
ただし、mu は短すぎるため、より高度なツールを使用する方がよいでしょう。この種のことについては、Thinking Sphinxの方が好きです。
Class.all(:conditions => ["attribute LIKE ?", "array%"])
それでうまくいくはずです。私はRails2をしばらく使っているので、もっと良い方法がありますが、うまくいくでしょう。