2014-12-23 8 views
0

hereFuzzyQuery으로 설명 된대로 페이로드 부스트를 사용할 수 있습니까? 또는 하이브리드 퍼지/페이로드 검색을 구현하는 가장 좋은 전략이 무엇인지 제안 할 수 있습니다.Lucene-4.x에서 FuzzyQuery와 함께 페이로드 부스트 사용

현재 색인에 문서에 설명 된 기술을 사용하여 특정 부분의 일치 우선 순위가 더 높은 문서가 있습니다. 퍼지 쿼리가 무대에 올 때까지 모든 것이 잘됩니다.

지금 당장 Lucene 코드를 어떻게 든 해킹하여 페이로드 요소로 점수를 조정할 계획을 세우고 있습니다. MultiTermQuery.TopTermsScoringBooleanQueryRewrite.addClause(). 그러나 이것이 이것이 문제를 해결하는 가장 좋은 방법인지 확신 할 수 없습니다.

좋습니다.

대체로 a very similar question에 질문했지만 아직 만족할만한 해결책을 얻지 못했습니다.

답변

1

나는 해결책이있다.

PayloadTermQuery 만 사용해야하지만 고유 필터로 토큰을 확장 할 수 있습니다. 이 고유 한 필터를 사용하면 새로운 간단한 용어를 토큰 체인에 넣을 수 있습니다. 즉, 아스키 접기, 이중 문자 제거 등이 가능합니다. PayloadTermQuery를 사용하여 새로운 용어에 대한 점수를 평가 절하 할 수도 있습니다.

나를 위해이 솔루션은 잘 작동하고 정말 빠릅니다. 내가 도울 수 있기를 바란다.

내 솔루션의 일부 코드 :

private String simplifyingToken(String token) { 
    String token = H.foldToAscii(token); 
    if(!H.isNumber(token)){ 
     token = token.replaceAll("(.)\\1", "$1"); //double letters 
    } 
    token = token.replaceAll("\\-", ""); 
    token = token.replaceAll("(ou)", "u"); 
    token = token.replaceAll("(cz)", "c"); 
    token = token.replaceAll("w", "v"); 
    return simpleTokenJocker + token; //tf idf correction 
} 
+0

음, 용어 필터 pertially 문제를 해결하지만, 경우에만 우리가 할 수있는 일대일 변환을 수행 할 수 있습니다. 예를 들어 확장해야 할 때 별표, 위의 것과 같은 실제 색인을 조회하지 않고 간단한 필터를 사용하면 지수가 커질 수 있습니다. 따라서 우리는 실제 FuzzyQuery 동작을 모방하기 위해 인덱스 룩업을 다시 구현해야합니다. – user3159253

+0

나는 당신에게 동의합니다. 이것은 단순한 경우에 도움이 될 수있는 간단한 솔루션 일뿐입니다. –

+0

불행히도 내 경우는 단순한 것이 아닙니다. – user3159253