2010-03-21 2 views
1

스핑크스를 사용하여 db의 항목이 실제로 영어 인 프랑스어 단어를 검색하려면 어떻게해야합니까?ROR 프로젝트의 Thinking Sphinx를 통해 french 검색

내가 "카테고리"라는 DB의 테이블이있는 ROR 프로젝트를 가지고 있고, 카테고리 이름은 영어, 종류가 많은 "질문"항목에 있습니다

상황이다.

현지화 파일 config/locals/fr.yml에서이 카테고리는 프랑스어로 번역되었습니다.

확장성에 대해 고려해 보면 db의 범주 이름을 프랑스어로 변경할 수 없습니다.

사용자는 키워드의 일부를 입력하여 검색 할 수 있습니다. 카테고리 이름 : 보건 프랑스어로 의료 : 상테 등 médecine

그래서이 할 수있는 방법 : 검색 필드와 스핑크스에 유형 "상테의 médecine ABC 방송의"를 반환합니다 여기

은 예입니다 "건강 및 의학"카테고리 아래의 "질문"과 키워드 "abc"가 있습니까?

답변

0

먼저 db 데이터를 변환하기 위해 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 %> 

또는 모델 및 경로에 따라 유사한 링크를 생성해야합니다.

당신이 태그를 선택할 수있는 몇 가지 체크 박스를 선택하거나 필드를 원한다면, 당신은 similary 위의 예에 수행해야합니다

# 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].

+0

답장을 보내 주셔서 감사합니다. 카테고리가 많으므로 사용자가 카테고리를 선택하도록 선택하면 ID가 적당하지 않습니다. 고객은 검색 상자에 카테고리 이름의 일부를 입력하여 해당 카테고리 아래의 모든 "질문"을 찾으려고합니다. 검색 엔진은 스핑크스입니다. –

+0

입력이 다른 언어로 된 카테고리의 일부일 수 있다는 것을 의미합니까? 그렇다면 일치하는 카테고리의 모든 질문을 받아야합니까? – klew

+0

그렇다면 먼저 yml 파일의 모든 카테고리 이름과 일치시키고 카테고리 ID를 가져와야합니다. 그런 다음 db에서 모든 것을 가져옵니다. 스핑크스는 여기에 필요하지 않습니다. 그리고 스핑크스에 관해서 제가 아는 한 (나는 단지 약간 알고 있습니다) 그것이 db에 직접 간결하다는 것입니다. 그래서 아마도 db에있는 데이터 만 찾을 수 있습니다. 그래서 당신이 yml에 뭔가가 있다면, 그것은 스핑크스에 의해 사용되지 않을 것입니다. 다시 한번 : 당신은 당신의 번역을 데이터베이스에 저장해야합니다. – klew