2013-02-04 2 views
1

Lucene의 표준 분석기 사용. 문제의 제목 입력란은 저장되지 않고 분석됩니다.Lucene.net GetFieldQuery 대 TermQuery

title:"some url friendly title" (- replaced by whitespace, everything lowercased). 

내가 생각 Lucene.net 버전은 다음과 같습니다 :

new TermQuery(new Term("title","Some-Url-Friendly-Title")) 

누가 복음에서
title:"Some-Url-Friendly-Title" 

은이 쿼리가 올바르게으로 다시 작성됩니다 다음과 같이 쿼리입니다

그러나 결과는 반환되지 않습니다.

_parser.GetFieldQuery("title","Some-Url-Friendly-Title") 

을 그리고 예상대로 일 :

그럼 난 시도!

두 쿼리를 통해 수행되었다 : _searcher.Search ([쿼리 개체], [정렬 개체])

누군가가) (어떤 TermQuery와 _parser.GetFieldQuery의 차이를 확인하기 위해 올바른 방향으로 날 지점 수 아르?

답변

2

TermQuery은 queryparser를 통해 쿼리를 실행하는 것보다 훨씬 간단합니다. 소문자가 아니며 하이픈으로 된 용어를 해독하는 것을 이해하지 못할뿐만 아니라 토큰 화되지도 않습니다. 찾는 단어를 검색합니다. 즉, 색인에서 단일 키워드로 단일 URL로 친근한 제목이라는 용어를 찾고 있음을 의미합니다. 나는 당신이 분석기를 사용하고 있다고 가정하므로 그러한 토큰이 존재하지 않을 가능성이 있습니다.

"Some Url Friendly Title"을 Term 텍스트로 검색하는 경우 한 걸음 더 나아가려면 "Some Url Friendly Title"을 (를) 찾고 있기 때문에 아무 것도 나오지 않습니다. 단일 토큰이 아니라 색인의 네 가지 토큰 (또는 오히려 용어)이 아닙니다. 당신이 당신의 쿼리를 구문 분석 할 때 a를 standard query parser가 생성하는 것을 보면

, 당신은 TermQueries이 BooleanQuery와 함께, 그것은 전체 쿼리를 생성하는 데 사용하는 빌딩 블록의 하나임을 확인하고 있습니다 가능 PhraseQuery, PrefixQueriy,

+0

그래서 TermQuery를 생성하고 searcher를 통해 실행하면 분석하지 않고 요청한 용어 값을 토큰 화합니까? 나는 searcher를 통해 실행 된 모든 쿼리가 실행되기 전에 적절히 분석된다는 인상을 받았다. 그렇지 않은가요? –

+0

그렇지 않습니다. 일반적으로 분석기는 문서 인덱싱 (추가 또는 업데이트) 및 쿼리 구문 분석시 적용됩니다. 물론 인덱스에 도달하기 전에 쿼리에 분석기를 적용하는 일부 레이어를 추가하지 않는 한. 그러나 IndexSearcher는 필자가 알고 있듯이 (IndexWriter와 QueryParser가하는 것과는 달리) 분석기에 대해서는 아무 것도 모른다. – femtoRgon

+0

감사합니다. 더 자세히 살펴보면 Manning 's Lucene 책의 인용문이 있습니다. "검색어 표현식의 한 단어가 검색어와 일치합니다. 표현식이 하나의 단어" "으로 구성되어있는 경우 검색어 구문어에서 TermQuery가 반환됩니다. 의미, 제 이해 거꾸로.나는 질의 객체를 생성하는 것이 질의를 생성하여 검색 자에게 보내는 명확한 방법이라고 생각했다. 현실은 정반대입니다. QueryParser에 문자열을 입력하면 검색기에서 실행되는 Query 개체가 만들어집니다. 당신의 답은 나를 올바른 길로 인도합니다. –

0

Lucene.Net 버전 3.0.3에서 GetFieldQuery는 보호 수정 자로 인해 액세스 할 수 없습니다.

MultiFieldQueryParser.Parse(searchText, field) 

을 대신 사용하십시오.