Met Lucene: Hoekom kry ek 'n Te veel Klousules fout as ek doen 'n voorvoegsel soek?

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

  •  08-06-2019
  •  | 
  •  

Vra

Ek het 'n app doen voorvoegsel soektogte vir 'n rukkie het. Onlangs is die indeks grootte toegeneem en het dit geblyk dat sommige voorvoegsels was te darned talle vir Lucene te hanteer. Dit het gooi my 'n Te veel klousules fout, wat was baie frustrerend as ek het bly kyk na my pype en bevestig dat nie een van die ingesluit kode eintlik gebruik 'n boolean navraag.

Hoekom is dit nie iets soos 'n Te veel uitsondering Treffers gooi? En waarom die verhoging van statiese maksimum klousules die boolean navraag se heel getal eintlik maak hierdie fout gaan weg, wanneer ek beslis net met behulp van 'n voorvoegsel navraag? Is daar iets fundamenteel tot hoe navrae bedryf wat ek nie verstaan; Wat is dit wat hulle in die geheim geword Boole navrae?

Ander wenke

Die API verwysing bladsy van TooManyClauses toon dat PrefixQuery, FuzzyQuery, WildcardQuery, en RangeQuery is uitgebrei op hierdie manier (in BooleanQuery). Want dit is in die API verwysing, moet dit 'n gedrag wat gebruikers kan staatmaak op wees. Lucene nie plaas arbitrêre perke op die aantal hits (behalwe 'n dokument ID synde 'n int) so 'n "te veel treffers" uitsondering dalk nie sin maak nie. Miskien PrefixQuery.rewrite (IndexReader) moet die TooManyClauses vang en gooi 'n "te veel voorvoegsels" uitsondering, maar nou is dit nie optree op die manier.

By the way, 'n ander manier om te soek deur voorvoegsel is om PrefixFilter gebruik. Óf filter jou navraag met dit of draai die filter met 'n ConstantScoreQuery.

As jy 'n voorvoegsel navraag, Lucene soek vir al die terme in sy "woordeboek" wat ooreenstem met die soektog. As daar meer as 1024 (by verstek) wedstryd, die TooManyClauses-Uitsondering gegooi.

Jy kan BooleanQuery.setMaxClauseCount bel om die maksimum aantal klousules toegelaat per BooleanQuery verhoog.

scroll top