2014-06-16 1 views
0

나는 Lucene을 사용하여 문장 세트를 인덱싱합니다. 내 쿼리는 두 개의 "단체"로하고이 같은 근접 쿼리를 만들 :Lucene 근접 식 쿼리에서 텍스트 검색

"EntityA EntityB"~22 

와 나는 22 개 문자의 최대 범위에서이 두 가지 요소를 포함 된 모든 문장을 검색 할 수 있습니다. 이제 Lucene Highlighter를 사용하여 두 엔티티 사이의 단어를 검색하려고합니다. 조각 같은 내용으로 분할하는 코드를 사용하고 있지만 두 엔티티 사이의 정확한 지점에서 조각을 설정하는 방법을 모르겠습니다.

for (int i = 0; i < numTotalHits; i++) { 
      int id = hits[i].doc; 
      Document doc = searcher.doc(hits[i].doc); 
      String text = doc.get("content"); 
      TokenStream tokenStream = TokenSources.getAnyTokenStream(searcher.getIndexReader(), id , "content", analyzer); 
      String[] frag = getFragmentsWithHighlightedTerms(analyzer, query, "content", text, 10, 10); 

      for (int j = 0; j < frag.length; j++) { 
        System.out.println((frag[j].toString())); 
      } 

예를 들어, 기업 내부의 텍스트를 검색 할 수 있도록 목표로 내 :

entity1 --> Canada 
entity2 --> Ottawa 
sentence --> Natural Resources Canada, Canadian Forest Service, Ottawa. 
result --> , Canadian Forest Service, 

답변

0

은 "foo는 바"~ 22 구문의 최고에 22 통이 넓은 바지와 구문 쿼리를 만들 것입니다 내 지식. 22는 2 개의 토큰을 쿼리와 동일한 순서로 서로 가깝게 얻기 위해 최대 22 개의 이동이 가능하다는 것을 지정합니다. 22 개의 동작에는 다른 토큰이있는 작업 영역이 전환되며 토큰 길이와 관련이 없습니다 (이 경우 토큰은 단어 임).

일단 구문 쿼리로 관련 결과를 검색하면 두 엔티티간에 전체 조각을 가져올 수있는 확실한 방법이 없다고 생각합니다.

당신은 이미 22 문자 범위를 언급했기 때문에 직접 쿼리 객체를 만들 수 있습니다. 그런 다음 강조 표시된 텍스트에서 2 개의 요소를 쉽게 다듬을 수 있습니다.