2009-09-07 13 views
3

저는 lucene의 QueryParser와 비슷한 것을 만들려고합니다. 그러나 파서가 없으면, 즉 StandardAnalyzer를 통해 문자열을 실행하고 tokenize하고 BooleanQuery에서 TermQuery : s를 사용하여 쿼리를 생성하십시오. 내 문제는 내가 토큰을 얻을 수 있다는 점이다. StandardAnalyzer가 아니라 Term : s. Token.term()을 사용하여 토큰을 추출하여 토큰을 변환 할 수 있지만이 토큰은 2.4.x 전용이며 역으로 표시됩니다. 두 번째 필드를 추가해야하기 때문입니다. StandardAnalyzer로 TermQuery를 제작하는 올바른 방법은 무엇입니까? 토큰 텍스트가 함께 얻을StandardAnalyzer를 TermQuery와 함께 사용하려면 어떻게해야합니까?

from lucene import * 
def term_match(self, phrase): 
    query = BooleanQuery() 
    sa = StandardAnalyzer()    
    for token in sa.tokenStream("contents", StringReader(phrase)): 
     term_query = TermQuery(Term("contents", token.term()) 
     query.add(term_query), BooleanClause.Occur.SHOULD) 

답변

2

확립 된 방법 :

내가 pylucene을 사용하고 있습니다,하지만 난 대답은 자바 등이 여기에 같은 추측 내가 함께 왔어요 코드입니다 token.termText() - 그 API는 영원히 존재했습니다.

예, AnalyzerTerm에 모두 필드 이름을 지정해야합니다. 나는 그것이 정상적인 것으로 생각한다. 8)이

+0

은 API 문서에 따르면, token.termText는()이다 deprecated, 그리고 그들은 나를 대신 가리키는 뭔가를 사용하여 token.termBuffer() [0 : token.termLength()] 하지만 더 어색해 보인다. –

0

내가 루씬 2.9 API와 자바를 사용하여, 동일한 문제가 건너와 한, 내 코드는 다음과 같습니다

final TokenStream tokenStream = new StandardAnalyzer(Version.LUCENE_29) 
    .tokenStream(fieldName , new StringReader(value)); 
final List<String> result = new ArrayList<String>(); 
try { 
while (tokenStream.incrementToken()) { 
    final TermAttribute term = (TermAttribute) tokenStream.getAttribute(TermAttribute.class); 
    result.add(term.term()); 
} 
관련 문제