2012-08-16 13 views
6

Sto usando la componente solr suggestione con la seguente configurazione:selezione campo in modo dinamico per Solr Suggerimento (Controllo ortografico) interrogazione multipla termine

schema.xml

<fieldType name="textSpell" class="solr.TextField"> 
<analyzer> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType> 
<field name="image_memo" type="text_general"/> 
<field name="username" type="text_general"/> 
<field name="image_memo" type="text_general"/> 
<field name="image_text" type="text_general"/> 
<!-- More fields included here --> 
<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/> 
<copyField source="*" dest="spell"/> 

solrconfig.xml

<searchComponent class="solr.SpellCheckComponent" name="suggest"> 
    <lst name="spellchecker"> 
     <str name="name">suggest</str> 
     <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
     <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str> 
     <str name="field">spell</str> 
     <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 

<requestHandler class="org.apache.solr.handler.component.SearchHandler" 
    name="/suggest"> 
    <lst name="defaults"> 
     <str name="spellcheck">true</str> 
     <str name="spellcheck.dictionary">suggest</str> 
     <str name="spellcheck.onlyMorePopular">true</str> 
     <str name="spellcheck.count">6</str> 
     <str name="spellcheck.collate">true</str> 
     <str name="spellcheck.collateExtendedResults">true</str> 
     <str name="spellcheck.collate">true</str> 
     <str name="spellcheck.maxCollations">6</str> 
     <str name="spellcheck.maxCollationTries">1000</str> 
     <str name="spellcheck.extendedResults">true</str> 
     <str name="spellcheck.collateParam.mm">100%</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
     <str>query</str> 
    </arr> 
</requestHandler> 

Come potete vedere c'è un campo spell che sto usando per una richiesta di suggerimenti. Funziona perfettamente anche per query a più termini.

Ma quello di cui ho bisogno è cercare solo nei campi selezionati.
Quindi, ad esempio, desidero suggerimenti validi solo per i campi image_memo e username L'utente può aggiungere e rimuovere dinamicamente i campi da cercare.

So che avrei potuto fare qualcosa di simile:

q = (image_memo: * Ricerca * O image_username: * Ricerca *)

Ma questo è sta rallentando dramtically se ha molti campi e una query a più termini.

Esempio: ricerca in campo memo, username, field, field1 and field2 per term, term1 and term2.

((nota: termine o utente: termine OR campo: termine O field1: termine O field2: termine) E (nota: term1 O nome utente: termine1 campo O: term1 OR field1: term1 O field2: term1) AND (nota: termine2 O username: termine2 OR campo: termine2 O field1: termine2 O field2: termine2))

C'è un modo per selezionare dinamicamente i campi spell. O c'è un modo in cui posso cercare campi specifici solo in un campo multivalore

Sto usando Apach Solr 4 Alpha.

+0

Puoi postare quale soluzione ha funzionato per te, vedo che non hai accettato la risposta data. In tal caso, potresti pubblicare la risposta. Sto affrontando una sfida simile. Grazie – nish

risposta

0

Tutto ciò che dovete fare è usare Dismax o eDismax. SpellcheckComponent esegue automaticamente ogni suggerimento usando i parametri della tua query.

Quindi, si deve interrogare in questo modo:

/suggest?q={!dismax}term1 term2 term3&qf=memo username field field1 field2 

o

/suggest?q=term1 term2 term3&defType=dismax&qf=memo username field field1 field2 

è possibile implementare il queryparser personalizzato se non si desidera utilizzare (e) dismax.

Problemi correlati