4

クエリの複数形に問題があります。私が必要としているのは、rubyのメソッド、または検索時に役立つSQLです。例えば:

「配列」を検索すると、「配列」の結果も返されるようにします。

ありがとう

4

3 に答える 3

3

あなたが探しているのは単語ステミングです。

たくさんの正規表現を使って英語のような言語のステミングを実際に行うことはできません。例外が多すぎます。大きなステミング辞書が必要です。

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 のような、より大規模でカスタマイズが容易なツールを使用することです。

于 2012-10-13T00:56:24.893 に答える
1

Postgres 全文検索を使用する場合は、ここここで概説されているように、辞書を変更できます。

ただし、mu は短すぎるため、より高度なツールを使用する方がよいでしょう。この種のことについては、Thinking Sphinxの方が好きです。

于 2012-10-12T23:09:41.357 に答える
0
Class.all(:conditions => ["attribute LIKE ?", "array%"]) 

それでうまくいくはずです。私はRails2をしばらく使っているので、もっと良い方法がありますが、うまくいくでしょう。

于 2012-10-12T21:40:32.730 に答える