2012-10-22 3 views
1

검색 막대에서 미리 읽기 작업을 수행하고 있습니다 (스펙 작성기에 따라).오라클 텍스트 중괄호 동작

기본적으로 사용자는 텍스트 입력을 시작할 수 있으며 제안 사항 바를 가능성있는 일치 항목으로 채 웁니다.

나는 이것에 대한 오라클의 텍스트를 사용했는데, 몇 가지 문제, 그리고 최신의 존재에 달렸다 :

표 answertext이 항목이 포함 : ... 우리는 많은 가격 옵션을 제공합니다 ...

SELECT 
    questiontext as qtext, 
    answertext as text, 
    questionid FROM question 
    WHERE contains(answertext, '{pric}', 1) > 0 

; 

이 쿼리는 아무 것도 반환하지 않습니다. 그러나 {pricing}을 사용하면 올바른 결과가 반환됩니다.

왜 이런 일이 발생하는지 대단합니다!

편집 : 사용자가 "보고서"와 "보고"를 구별하기를 원하기 때문에 형태소 분석을 사용하여 추가하지 말고 싶습니다. 일치하는 부분 문자열을 찾을 수 있으면 강조 할 수 있습니다. 반환 된 결과 중 하위 문자열

편집 2 : 오라클이 인덱스에서 단어 경계를 사용하여 각 단어를 토큰 화하고 따라서 와일드 카드가 없으면 'pric'와 같은 토큰을 찾고 따라서 찾을 수 없다고 생각합니다. 토큰 '가격 책정'이 있기 때문에). 그래서 그 추측이 정확하다면, 만약 누군가가 공백을 계속 유지하면서 예제 항목으로 작업 할 수있는 위의 쿼리를 어떻게 만들 수 있는지에 대해 이야기 할 수 있다면 좋을 것입니다. '가격 옵션'을 입력하면 리턴해야하지만, 'many options' 하지 말아야 ...

+0

왜 pric %가 작동하지 않습니까? – FoolishSeth

답변

2

CONTAINS 연산자는 wildcards과 퍼지 텍스트 검색을 지원합니다. 시도 :

SELECT * FROM question WHERE contains(answertext, '{pric%}', 1) > 0; 

또는

SELECT * FROM question WHERE contains(answertext, 'fuzzy({pric})', 1) > 0; 

그러나와

fuzzy "prize" 또한 당신의 검색 기준에 일치합니다.

발견 된 하위 문자열을 강조 표시하려면 CTX_DOC.MARKUP을 사용할 수 있습니다.