2013-07-05 2 views
0

역 색인을 검색 'cat'과 'dog'라는 단어가 같은 storage_document에있는 문서를 선택하려고합니다.수동으로 내가이 개 테이블 내에서 문서의 역 인덱스를 생성

내 시도했다 : INNER가 index_token.token_id = index_documents.token_id ON index_documents 가입 index_token FROM

SELECT * WHERE index_token.token = '고양이'OR/AND index_token.token = '개'

OR은 두 번째 토큰을 선택 사항으로 지정하므로 개가 있거나 고양이가 있지만 개와 고양이가없는 문서는 가져옵니다. AND 결과가 없습니다.

그럼 예상되는 결과를 얻으려면 어떻게 쿼리를 변경해야합니까?

또한 2 개 이상의 키워드를 허용해야합니다.

답변

1
SELECT dog_docs.doc_id from 
(
SELECT index_documents.doc_id 
FROM index_documents 
INNER JOIN index_token 
ON index_token.token_id = index_documents.token_id 
WHERE index_token.token = 'cat' 
) cat_docs 
INNER JOIN 
(
SELECT index_documents.doc_id 
FROM index_documents 
INNER JOIN index_token 
ON index_token.token_id = index_documents.token_id 
WHERE index_token.token = 'dog' 
) dog_docs 
ON cat_docs.doc_id = dog_docs.doc_id 
+0

그래 그것이 올바른 방향으로하지만, 공통적으로 있어야한다 storage_document_id있는 문서 참조로 전환, DOC_ID는 index_documents – pila

+0

단지 기본 키입니다하지만 난 더 확장 해결책이 궁금해? 그래서 나는 각각의 추가 키워드에 대해 완전히 새로운 INNER JOIN 블록을 추가해야한다 ... 아주 좋지는 않지만 작동한다고 생각한다. – pila

관련 문제