2014-03-19 2 views
0

을 사용하는 카테고리를 기준으로 필터링 다음 텍스트 필드가 있습니다. 스핑크스로 검색 : 제목, 설명, 키워드.스핑크스 OR

그러나 카테고리를 사용하여 사물을 좁히는 경우가 있습니다. CatID1, CatID2 및 CatID3의 카테고리 필드가 있습니다.

예를 들어, "Kittens"라는 단어가 제목, 설명 또는 키워드에 있는지 확인해야하지만 범주 (동물 - ID 번호 8)가있는 항목 만 필터링하도록 필터링하고 싶습니다. 또는 (애완 동물 - ID 번호 9) 또는 (고양이 - 카테고리 ID 번호 10) 해당 CatID 필드에서.

는 8, 9 또는 10 CatID1, 2 또는 3

나는이 스핑크스 필터링을 사용 또는 키워드로 CatID1 필드를 검색 달성 할 방법에 대한 아이디어를 가지고 만 표시 항목을 명확히하기 위해?

참고 : 즉, 나는 필터링 할 수 오전 그것은 단지 하나 개의 범주를 사용하여 좋은 작품 :

if(!empty($cat_str)) { 


     $cl->SetFilter('catid1', array($cat_str)); 


     } 

감사합니다! 크레이그

답변

1

SetFilter

배열 걸린다. 귀하의 예에서는 $cat_str을 배열에 넣습니다. 1 개의 아이템의 배열입니다.

그래서 모든 ID로 배열을 작성하면됩니다.

$cl->SetFilter('catid', array($cat1, $cat2, $cat3)); 

하지만 그다지 유연하지 않습니다. 그래서 아마 하드 코딩 된 것이 아닌 동적으로 배열을 구축 할 것입니다. 하지만 배열을 만드는 방법은 응용 프로그램에 달려 있습니다.

또한 ID를 저장하는 세 가지 속성에서 검색하기가 어렵습니다. 위의 예에서 알 수 있듯이 catid이라는 속성이 나타났습니다. 이것은 세 개의 cat 필드의 ID를 포함하는 단일 다중 값 속성입니다. 그렇게하면 한 번에 열의 ANY에서 ID를 쉽게 검색 할 수 있습니다.

http://sphinxsearch.com/docs/current.html#mva

는 SQL 소스를 사용하는 경우,

sql_query = SELECT id, title ... , CONCAT_WS(',', CatID1, CatID2 and CatID3) as catid FROM ... 
sql_attr_multi = uint catid from field; 
+0

확인 같은 것을 함께 할 수있는, 나는 당신이 그 쿼리를 여기에서 점점 그이 나를 크게 도움이 될 것입니다 무엇을보고 생각합니다. 항상 스핑크스 질문에 배리. 에 감사하다! – CRAIG

+0

배리. 이러한 변경을 수행하고 내 쿼리를 테스트하고 작동합니다. searchd를 다시 시작하면 인덱스가 자동으로 다시 작성됩니까? – CRAIG

+0

아니요. 인덱스를 다시 작성하려면'indexer'를 사용해야합니다. – barryhunter