Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
 dlamblin
dlamblin

Cu Lucene: De ce primesc o eroare la prea multe clauze dacă fac o căutare prefix?

Am avut o aplicație care face căutări de prefix pentru o vreme. Recent, mărimea indexului a fost mărită și sa dovedit că unele prefixe erau prea numeroase pentru a lucra cu lucene. A continuat să-mi arunc o prea multe Clauze , ceea ce a fost foarte frustrant, deoarece m-am uitat la JAR-urile mele și am confirmat că nici unul din codul inclus nu a folosit o interogare booleană.

De ce nu arunca ceva asemănător cu o excepție prea mare? Și de ce creșterea integerului interogării clasei statice maxime interogare booleană face de fapt această eroare să dispară, când cu siguranță folosesc doar o interogare prefix? Există ceva fundamental pentru modul în care sunt rulate interogările pe care nu le înțeleg; este ca ei devin în secret întrebări booleene?

8 2008-08-12T06:04:48+00:00 3
Programare
exception
lucene
Comentarii la întrebare (0)
Ryan Ahearn
12 august 2008 в 9:58
2008-08-12T21:58:08+00:00
Mai mult
Sursă
Editează
#9085

Am mai lovit-o înainte. Ea are legătură cu faptul că lucene, sub capace, transformă multe (toate?) Lucruri în interogări booleene atunci când numiți Query.rewrite ()

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
0
0
Comentarii (0)
Stefan Schultze
16 septembrie 2008 в 12:07
2008-09-16T00:07:19+00:00
Mai mult
Sursă
Editează
#66419

Când rulați o interogare de prefix, Lucene caută toți termenii din "dicționarul" care corespund interogării. Dacă se potrivește mai mult de 1024 (implicit), se aruncă excepția TooManyClauses-Exception.

Puteți apela BooleanQuery.setMaxClauseCount pentru a crește numărul maxim de clauze permise pentru BooleanQuery.

0
0
Comentarii (0)
Kai Chan
30 septembrie 2008 в 12:44
2008-09-30T00:44:09+00:00
Mai mult
Sursă
Editează
#150553

Pagina de referință API a lui TooManyClauses arată că PrefixQuery, FuzzyQuery, WildcardQuery și RangeQuery sunt extinse în acest fel (în BooleanQuery). Întrucât se află în referința API, ar trebui să fie un comportament pe care utilizatorii se pot baza. Lucene nu plasează limite arbitrare asupra numărului de hit-uri (altele decât un ID de document fiind un int), astfel încât o excepție "prea multă lovitură" ar putea să nu aibă sens. Poate că PrefixQuery.rewrite (IndexReader) ar trebui să captureze TooManyClauses și să arunce o excepție "prea multe prefixe", dar acum nu se comportă în acest fel.

Apropo, un alt mod de a căuta prin prefix este să utilizați PrefixFilter. Fie filtrați interogarea cu aceasta, fie împachetați filtrul cu un ConstantScoreQuery.

0
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RU
© Answer-ID 2021
Sursă
https://stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire