2012-05-02 1 views
1

결과의 페이로드를 액세스, 나는 결과 문서의 목록이 표시됩니다. 하지만 그 문서들에서 히트 수를 어떻게 얻을 수 있습니까? 해당 단어의 페이로드에 액세스하려고합니다.이 단어는 쿼리에서 찾을 수 있습니다.는 루씬은 : 나는 루씬에서 쿼리 찾고 있어요 쿼리

쿼리가 하나의 용어가 포함되어있는 경우 단순히이 용어의 페이로드에 액세스 할 수 TermPositions를 사용할 수 있습니다. 그러나 Phrase Search, Proximity Search로 더 복잡한 검색어를 사용하는 경우 ... TermPositions에서 단일 검색어 만 검색 할 수는 없습니다.

List<Token>, TokenStream 또는 유사한 것으로 알고 싶습니다. 여기에는 쿼리에서 찾은 모든 토큰이 들어 있습니다. 그런 다음 목록을 반복하고 각 토큰의 페이로드에 액세스 할 수 있습니다.

답변

0

나는 당신이 문서에서 일치하는 용어를 강조 같이 루씬 형광펜을보고 시작하는 것이 좋습니다 생각합니다.

+0

루씬 하이 라이터는 꽤 좋은 일을하고있다하지만, 난 여전히 페이로드에 액세스하는 데 문제가 있습니다. 나는 자신의 포맷터를 쓰려고 노력하고있다. 형광펜은 TokenGroup을 Formatter로 전달합니다. TokenGroup에서 Token의 getPayload() 함수를 호출 할 때마다 항상 null이 반환됩니다. 하지만 TermPositions를 통해 페이로드에 액세스하면 작동합니다. 토큰이 작동하지 않는 이유는 무엇입니까? 하이 라이터에 사용하는 전체 TokenStream에는 페이로드 특성이 없습니다. 그것은 항상 null입니다. – ethan123

+0

다음 코드로 TokenStream을 얻습니다. TokenStream tokenStream = TokenSources.getAnyTokenStream (searcher.getIndexReader(), id, "contents", analyzer); 다르게해야합니까? – ethan123

1

SpanQueries를 사용하여 문제를 해결했습니다. 거의 모든 쿼리는 SpanQuery로 표현할 수 있습니다. SpanQuery는 문서 내의 히트가있는 범위에 대한 액세스를 제공합니다. 일반 QueryParser는 SpanQuery를 생성하지 않기 때문에 SpanQueries 만 생성하는 자체 구문 분석기를 작성해야했습니다. 또 다른 옵션은 Lucene-Contrib의 SurroundParser이며 SpanQueries를 생성합니다.

관련 문제