2013-07-02 3 views
1

SPH_MATCH_EXTENDED2 쿼리 구문과 함께 sphinx 2.0.4-release를 사용하고 있습니다. 내 쿼리 즉 :에 "빈 값을"있을 때SPHINX 필드 검색 운영자 문제

blah & '' 

스핑크스는 검색한다 그냥 "ㅋ"를 무시합니다.

@field1 blah @field2 '' 

그러나이 쿼리 :

@field1 '' @field2 blah 

원인 오류 : 내가 필드 검색 연산자 및 빈 값이 마지막으로 오는 사용할 때 그것은 여전히 ​​같은 방식으로 작동 구문 오류, 예기치 TOK_FIELDLIMIT 근처 '' '을 @ field2 blah '. 물론 빈 값을 다듬을 수는 있지만이 동작은 나에게 비논리적 인 것처럼 보입니다 ... 내가 잘못한 것입니까? 아니면 실제로 버그입니까?

답변

0

스핑크스는 역 색인을 사용합니다. 그것은 텍스트를 단어와 저장물 (해시)로 분해합니다.

따라서 '아무 것도'색인을 생성하지 않으므로 빈 문자열을 검색 할 수 없습니다.

이러한 쿼리는 모두 구문 오류이며 말도 안됩니다. 그러나 어떤 경우에는 스핑크스가 무의미한 구문을 자동으로 처리합니다 (charset_table에없는 char라는 단어를 생각하고 다시 생각하기 때문에). 그러면 '유효한'쿼리가 생깁니다. 당신이 의도 한 것)

해결 방법은 빈 필드를 인덱싱 할 때 단순히 '단어'로 변환 한 다음 빈 문자열을 검색 할 수 있습니다! 당신이 'EMPTY_STRING'로 사용 무엇

@field1 EMPTY_STRING @field2 blah 

완전히 임의적으로

sql_query = SELECT id, title, IF(field1 = '','EMPTY_STRING',field1) AS field1, .... 

예를 들면 그럼 그냥 쿼리 할 수 ​​있습니다.

+0

답변 해 주셔서 감사합니다. 예, 빈 필드가있는 트릭을 알고 있습니다. 하지만 내 질문은 조금 달랐다 : 왜 두 번째 쿼리가 유효하고 세 번째 쿼리가 아닌가? 미안하지만 너의 설명이 나에게 명확하지 않다. 너는 자세히 설명 할 수 있니? –

+0

죄송합니다. 나는 "왜"인지 모른다. 나도 particully 상관 없어. 그것만으로는 그것이 작동하지 않는다는 것을 알기에 충분합니다. – barryhunter

+0

그래, 고마워! –