와 루씬:표시되는 이유는 무엇입니까 너무 많은 절 오류 할 경우에는 접두사 검색?

StackOverflow https://stackoverflow.com/questions/8532

  •  08-06-2019
  •  | 
  •  

문제

나는 앱을하고 접두사를 검색합니다.최근에는 인덱스 크기가 증가하고 밝혀졌는 접두사가 너무 꿰매는 수많은 위한 루씬하여 처리합니다.그것을 던지고 나에게 너무 많은항 오류,는 매우 실망으로 내 항아리와 확인하는 것도 포함 된 코드를 실제로 사용되는 부울 쿼리가 있습니다.

왜 그것을 던져 같은 것을 너무 많은 예외?왜 증가하고 부울 쿼리의 최대 정적 절 정수이 실제로 이러 갈 때,나는 확실히만 접두어로 사용 query?뭔가 근본적인 방법을 쿼리가 실행하는 내가 이해하지 않;그것은 그들은 비밀리에이 될 Boolean 쿼리가?

도움이 되었습니까?

해결책

나중이다.그것은 함께 할 수 있다는 사실을 루씬에서,커버,변 많(모?) 것으로 boolean 쿼리를 호출할 경우 쿼리가 있습니다.다시 쓰기()

From: http://lucene.apache.org/java/2_2_0/api/org/apache/lucene/search/Query.html#rewrite(org.apache.lucene.index.IndexReader)

public Query rewrite(IndexReader reader)
              throws IOException

    Expert: called to re-write queries into primitive queries.
            For example, a PrefixQuery will be rewritten into a
            BooleanQuery that consists of TermQuerys.

    Throws:
        IOException

다른 팁

API reference 페이지의 TooManyClauses 는 것을 보여줍 PrefixQuery,FuzzyQuery,WildcardQuery 및 RangeQuery 확장 이 방법(로 BooleanQuery).기 때문에 그것은 API 를 참조해야한다,행동하는 사용자에 의존하고 있습니다.루씬하지 않는 임의의 수에 대한 제한의 히트(다른 문서 ID 가 int)그래서"너무 많은"예외지 않을 수도 있습니다.아마도 PrefixQuery.다시 쓰기(IndexReader)를 잡으려고 TooManyClauses 을 던져"너무 많이 접두사를"예외는 아니다,하지만 지금은 그것은 작동하지 않는 방법입니다.

방법으로,다른 방법을 검색하여 접두사로 사용하 PrefixFilter.중 필터 쿼리에 또는 포장으로 필터 ConstantScoreQuery.

실행하는 경우에는 접두어 쿼리,루씬 검색에 대한 모든 측면에서는"사전에"일치하는 쿼리를 실행합니다.는 경우 이상 1024(기본적으로)일치 TooManyClauses-예외가 발생합니다.

당신을 호출 할 수 있습 BooleanQuery.setMaxClauseCount 하의 최대 수를 증가 절당 허용되는 BooleanQuery.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top