2013-08-09 2 views
0

lucene에 대한 몇 가지 문제점이 있습니다. 데이터베이스를 쿼리하고 있습니다. 나는 인덱스가 괜찮다는 것을 알고있다. (나는 lukeall-4.4.0로 체크했다.) 쿼리는 다음과 같이 구성됩니다.검색 결과보기 - lucene 4.4.0

   Q = Query.split(" "); 

       booleanQuery = new BooleanQuery(); 

       //Query[] Queryy = new Query[5 + 5 * Q.length]; 
       Query[] Queryy = new Query[3 + 3*Q.length]; 

       //USING THE ALL TEXT 
       Queryy[0] = new TermQuery(new Term("DESIGNACAO", Query)); 
       Queryy[1] = new TermQuery(new Term("DESCRICAO", Query)); 
       Queryy[2] = new TermQuery(new Term("TAG", Query)); 

       //USING THE SEPARETED VALUES 
       for (int i = 3, j = 0; j < Q.length; i++, j++) { 

        Queryy[i] = new TermQuery(new Term("DESIGNACAO", Q[j])); 
        Queryy[++i] = new TermQuery(new Term("DESCRICAO", Q[j])); 
        Queryy[++i] = new TermQuery(new Term("TAG", Q[j])); 

       } 

       for (int i = 0; i < Queryy.length; i++) { 
        booleanQuery.add(Queryy[i], BooleanClause.Occur.MUST); 
       } 

쿼리가 정상입니다. 내가 SimpleAnalyser을 사용하고

+DESIGNACAO:not or +DESCRICAO:not or +TAG:not or +DESIGNACAO:not +DESCRICAO:not +TAG:not +DESIGNACAO:or +DESCRICAO:or +TAG:or 

을, 따라서 단어되지 않고되거나 제거되지 않습니다 : "없습니다 또는"쿼리 검색의 경우 (A booleanQuery는) 다음과 같은 될 것입니다. 문제는 내가 안타를 칠 수 없다는 것이다. lukeall-4.4.0으로 검색을하면 코드가 나오지만 안타깝습니다. 내 검색 방법은 다음 중 하나입니다.

IndexReader reader = IndexReader.open(directory1); 
     TopScoreDocCollector collector = TopScoreDocCollector.create(50, true); 
     searcher = new IndexSearcher(reader); 
     searcher.search(booleanQuery, collector); 
     hits = collector.topDocs().scoreDocs; 
     int total = collector.getTotalHits(); 
     displayResults(); 

데이터를 수집하는 데 문제가 있습니까?

친절한 답변

+0

어떻게하면 부울 쿼리를 만들 수 있습니까? 그것을 보여줄 수 있습니까? –

+0

JtheRocker, 내 질문을 편집했습니다.) –

+0

그래서, DESIGNACAO 필드에서 'not'을 (를) 찾고 있는지 확인하십시오. –

답변

2

케이크 조각. 문제는 쿼리의 건설이었다

for (int i = 0; i < Queryy.length; i++) { 
    booleanQuery.add(Queryy[i], BooleanClause.Occur.MUST); 
} 

BooleanClause.Occur.MUST

이 존재한다는 것을 의미한다. 따라서 booleanquery에 추가하는 모든 용어가 존재해야합니다 (term1 AND term2 AND term3). 올바른입니다 : 내가 그 말을 할 수

booleanQuery.add(Queryy[i], BooleanClause.Occur.SHOULD); 

이 방법은 내가 추가 (용어 1이나 용어 2 또는 term3) 한 그 용어의 하나 존재한다.

감사합니다.

+0

@Predro Neves, 그건 완전히 멋지다! –

+0

;) 답장을 보내 주셔서 감사합니다. –