2011-08-19 2 views
0

Thinking Sphinx를 사용하여 Rails에서 특정 필드를 검색하려고합니다.FieldSpecing의 검색 기능이 작동하지 않습니다.

모델 A, B, C에는 a, b, c라는 세 개의 테이블이 있습니다. 테이블의

내용 : 표 A, B, C

mysql> select * from a; 
+----+--------+----------+ 
| id | name | city  | 
+----+--------+----------+ 
| 1 | 7-11 | Portland | 
| 2 | Costco | Bend  | 
| 3 | Costco | Astoria | 
+----+--------+----------+ 
3 rows in set (0.00 sec) 

mysql> select * from b; 
+----+--------+---------+ 
| id | name | city | 
+----+--------+---------+ 
| 1 | 7-11 | Bend | 
| 2 | Costco | Astoria | 
| 3 | Costco | Bend | 
+----+--------+---------+ 
3 rows in set (0.00 sec) 

mysql> select * from c; 
+----+--------+---------+ 
| id | name | city | 
+----+--------+---------+ 
| 1 | 7-11 | Astoria | 
| 2 | Costco | Astoria | 
| 3 | Costco | Bend | 
+----+--------+---------+ 
3 rows in set (0.00 sec) 

이 내가 응용 프로그램 와이드 검색을 사용하여 내 콘솔에서 할 것입니다 :

목표 : 을 모두 표시 7-11 년대에 포틀랜드시는

irb(main):021:0> @a = ThinkingSphinx.search "7-11 @city Portland", :match_mode=>:extended 
=> [] 

는 그 테이블 A는 7-가 알고 11 포틀랜드시와 함께.

irb(main):022:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended 
=> [] 

아스토리아 작품으로 도시와 코스트코 찾기 : 그래서 시도 할 수 있습니다. 장소 모두에 이름이있는 경우에 반대 필드 특정 검색이 텍스트 값으로 작동하는 이유를 모르겠어요

irb(main):023:0> @a = ThinkingSphinx.search "costco @city Astoria", :match_mode=>:extended 
=> [#<B id: 2, name: "Costco", city: "Astoria">, #<A id: 3, name: "Costco", city: "Astoria">, #<C id: 2, name: "Costco", city: "Astoria">] 

: 벤드 작품으로 도시와 코스트코 찾기

irb(main):023:0> @a = ThinkingSphinx.search "costco @city Astoria",  :match_mode=>:extended 
=> [#<B id: 2, name: "Costco", city: "Astoria">, #<A id: 3, name: "Costco", city:  "Astoria">, #<C id: 2, name: "Costco", city: "Astoria">] 

숫자와 대시 나는 문서를 읽었으며, 내가 뭘 잘못하고 있는지 모른다.

가 작동하는 것입니다 :

irb(main):026:0> @a = A.search "7-11" 
=> [#<A id: 1, name: "7-11", city: "Portland">] 

그리고이 없습니다

irb(main):027:0> @a = A.search "7-11 @city Portland", :match_mode=>:extended 
=> [] 
+0

모델 A의 define_index 블록의 모양은 무엇입니까? – pat

+0

define_index do 색인 이름 색인 도시 끝 – Shan

답변

1

아를하지, 내가 문제를 알고 있다고 생각 - 문제가 포틀랜드에 도시 ​​필터 아니다 ,하지만 확장 쿼리에서 하이픈을 사용하고 있다는 사실. A.search 'portland이 기록을 반환합니까? 그리고 A.search '@city portland', :match_mode => :extended?

이 문제를 해결하려면 Riddle.escape을 사용하여 쿼리를 이스케이프 처리하면됩니다. 단지 \을 특수 문자 앞에 붙여야합니다. 또한 :conditions을 사용하여 필드 중심 검색을 지정할 수 있으며 자동으로 일치 모드를 확장으로 설정한다는 점에 유의해야합니다.

A.search Riddle.escape('7-11'), :conditions => {:city => 'Portland'} 
+0

우수. 감사합니다. 나는 그것을 시험해보고, 내가 어디에서 붙어 있는지 보려고 노력할 것이다. – Shan