1

スフィンクスを使用して、データベースのエントリが実際に英語であるフランス語の単語を検索するにはどうすればよいですか?

状況は次のとおりです。

データベースに「カテゴリ」と呼ばれるテーブルを持つRORプロジェクトがあり、カテゴリ名は英語で、カテゴリには多くの「質問」エントリがあります。

ローカライズ ファイル config/locals/fr.yml では、これらのカテゴリがフランス語に翻訳されています。

拡張性について考慮してください。データベースのカテゴリ名をフランス語に変更することはできません。

ユーザーは、キーワードのタイプ部分で検索できます。

以下に例を示します: カテゴリ名: 健康と医療 フランス語: Santé et médecine

検索フィールドに「Santé médecine abc」と入力すると、sphinx は「健康と医療」カテゴリの下に「abc」というキーワードを持つ「質問」を返します。

4

1 に答える 1

0

まず、yml ファイルを使用して db データを変換するべきではないと思います。yml を使用して、db の列名やモデル名などを変換できますが、db に格納されているデータは変換できません。悪いデザインです。最善の方法は、さまざまな翻訳を db に格納することですが、db に格納せずにそのような検索を行う方法を知りたい場合は、次のようにします。

さまざまな方法でそれを行うことができます。タグへのリンクを生成する場合 (SO のように)、非常に簡単です。これらのリンクを次のように生成する必要があります。

# controller
@tags = Tag.all

# view 
<% @tags.each do |tag| %>
  <%= link_to I18n.t tag.name, search_tag_path(tag) %>
<% end %>

または、モデルとルートに応じて同様のもの。

タグを選択するためにいくつかのチェックボックスまたは選択フィールドが必要な場合は、上記の例と同様に行う必要があります。

# controller
@tags = Tag.all

# view
<% form_tag search_path do |f| %>
  <% @tags.each do |tag| %>
    <%= I18n.t tag.name %> <%= check_box_tag "tags[#{tag.id}]" %>
  <% end %>
<% end %>

ここで送信すると、選択したタグの ID の配列が取得されます: params[tags].

于 2010-03-21T14:00:12.040 に答える