Rails: 3.2.11 Ruby: 1.8.7 データベース: Postgres
次のような 100 万件のエントリを検索するために ILIKE を使用するカスタムメイドの検索エンジンがあります。
formatted_query_string = '%this%search%string'
like_variable = "ILIKE"
product_feed_query_line = [
"name " + like_variable, formatted_query_string, " OR",
"description " + like_variable, formatted_query_string, " OR",
"category = ", formatted_query_string
].join(" ")
@product_feed_products = FeededProduct.where(product_feed_query_line).where(:is_available => true).paginate(:page => params[:page], :per_page => 18)
データベースには、次のインデックスがありますschema.rb
。
add_index "feeded_products", ["name", "description", "category"], :name => "name"
これはデータベースで処理するのに約 4.5 秒かかりますが、これは明らかに長時間です。しかし、データセット (1M) によると、不当に長いですか?
別の検索エンジンに完全に変更することが将来的には良い考えであることはわかっていますが、時間をかけてこれを学ぶまでは、これをスピードアップするために何かすべきことがあるかどうか、またはこのタイプがのリクエストはこれだけ遅いです。