1

如何使用 sphinx 搜索数据库中的条目实际上是英文的法语单词?

情况是:

我有一个 ROR 项目,在数据库中有一个名为“类别”的表,类别名称是英文,类别有很多“问题”条目。

在本地化文件 config/locals/fr.yml 中,这些类别被翻译成法语。

考虑可扩展性,我们不能将数据库中的类别名称更改为法语。

用户可以按关键字的类型部分进行搜索。

这是一个示例: 类别名称:健康和医疗 法语:Santé et médecine

那么我该怎么做:在搜索字段中输入“Santé médecine abc”,然后 sphinx 将返回“健康和医疗”类别下的“问题”并有关键字“abc”?

4

1 回答 1

0

首先,我认为您不应该使用 yml 文件来翻译数据库数据。您可以使用 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 回答