2011-11-15 3 views
0

전체 사용자 쿼리를 인덱싱 된 데이터와 비교하고 정확히 일치하는 항목 만 반환하는 기능을 원합니다. 나는 우리가 이중 따옴표 안에 질의를 할 수 있다는 것을 안다. 그러나이 유틸리티는 우리의 어플리케이션에서 널리 쓰이기 때문에 필자는 사용자가 입력 한 쿼리에 대한 구문 쿼리를 작성하는 사용자 정의 구문 분석기 구성 요소를 설계했습니다 (큰 따옴표 안에 쿼리를 제공 할 때 solr이 수행하는 방식과 동일).Solr 맞춤 구문 분석기 문제

하지만이 경우 일치하는 문서를 가져올 수 없습니다.

코드는 다음과 같습니다

public Query parse() throws ParseException { 

    PhraseQuery pq = new PhraseQuery(); 
    String qf = params.get("qf",getReq().getSchema().getDefaultSearchFieldName()); 
    String query = getString(); 

    if(query == null){ 
     return pq;  
    } 
    String[] queryTerms = query.split("[ ?<>,/?\\()*[email protected]#$%^&_+=|{}'`~;:\"-.]"); 
    for(String queryTerm : queryTerms){ 
     pq.add(new Term(qf,queryTerm.toLowerCase())); 
    } 

    return pq; 
} 

어떤 제안하십시오 ???

답변

0

왜 사용자 정의 구현을 작성 하시겠습니까?
QueryParserHelper 클래스를 확장하고 호출하기 전에 쿼리를 수정하면 구문 쿼리가 만들어 지므로 잘 작동합니다.

프로토 타입 -

@Override 
public Query parse(String query, String defaultField) 
    throws QueryNodeException { 
    String modifiedQuery = "\""+query.toLowerCase()+"\""; 
    return (Query) super.parse(modifiedQuery, defaultField); 

} 
+0

니스 솔루션! 감사합니다 – sriram

+0

나는 똑같은했지만 내 사용자 지정 메서드를 호출하지 못했습니다 당신이 내게 왜이 호출되지 않습니다 알려주십시오 수 있습니다. 또한 동일한 질문을 요청했습니다. http://stackoverflow.com/questions/18431700/queryparserhelper-sub- classe-not-called. 한 번 봐봐. – user1047873