I've used a separated core for storing suggestions, based on what I see in: 
https://github.com/cominvent/autocomplete. You can check the blog post on 
www.cominvent.com/2012/01/25/super-flexible-autocomplete-with-solr/‎. This is 
really flexible, on the downside it does not use the suggester component su 
this are like regular queries against a separated core.

Greetings!

----- Mensaje original -----
De: "Erick Erickson" <erickerick...@gmail.com>
Para: solr-user@lucene.apache.org
Enviados: Miércoles, 25 de Septiembre 2013 6:16:51
Asunto: Re: Implementing Solr Suggester for Autocomplete (multiple columns)

I've sometimes seen this handled by clever tokenizing. For "Bill Rogers",
index (untokenized) something like
Bill|Bill Rogers
Rogers|Bill Rogers

Your suggester then is a simple term lookup (see TermsComponent)
which is quite fast. What you _don't_ get is autocorrect. But if you
use terms.prefix, you can also control whether it's whole word match
or not. To get whole-word in the above, you would set your prefix to
"Rogers|" for instance. Or you may want to leave off the "|" to see
more of an autocomplete-type response.

Then, of course, when you display this you need to only display what's
after the "|" (or whatever delimiter you use).

One other note, this will be case sensitive, so you probably want to
do casing yourself, index things like
rogers|Bill Rogers
and lowercase what you send in to terms component.

Best,
Erick



On Tue, Sep 24, 2013 at 2:01 PM, JMill <apprentice...@googlemail.com> wrote:
> Hi,
>
> I'm using Solr's Suggester function to implement an autocomplete feature.
> I have it setup to check against the "username" and "name" fields.  Problem
> is when running  a query against the name, the second term, after
> whitespace (surename) returns 0 results.  Works if if query is a partial
> name starting from the begining e.g. Given the name "Bill Rogers", a query
> for Rogers will return 0 results whereas a query for "Bill" will return
> positive (Bill Rogers). As for the username, it's not working at.
>
> I am after the following behaviour.
>
> Match any partial words in the fields "username" or "name" and return the
> results.  If there is match in the field "name" the return the whole name
> e.g. given the queries "Rogers" or "Bill"" return "Bill Rogers (not the
> single word that was a match)".
>
> schema.xml extract
> ..
> <field name="username" type="text_general" indexed="true" stored="true" />
>  <field name="name" type="text_general" indexed="true" stored="true"/>
> <field name="autocomplete" type="textSpell" indexed="true" stored="false"
> multiValued="true" omitNorms="true" omitTermFreqAndPositions="false" />
> ...
> <copyField source="username" dest="autocomplete"/>
> <copyField source="name" dest="autocomplete"/>
> ...
>
> <fieldType class="solr.TextField" name="textSpell"
> positionIncrementGap="100">
>  <analyzer>
>    <tokenizer class="solr.StandardTokenizerFactory"/>
>    <filter class="solr.StandardFilterFactory"/>
>    <filter class="solr.LowerCaseFilterFactory"/>
>  </analyzer>
> </fieldType>
>
>
> solrconfig.xml
>
> ....
> <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">autocomplete</str>  <!-- the indexed field to derive
> suggestions from -->
>    <float name="threshold">0.005</float>
>    <str name="buildOnCommit">true</str>
>    <!--
>       <str name="sourceLocation">american-english</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">5</str>
>     <str name="spellcheck.collate">true</str>
>   </lst>
>   <arr name="components">
>      <str>spellcheck</str>
>   </arr>
> </requestHandler>
________________________________________________________________________________________________
III Escuela Internacional de Invierno en la UCI del 17 al 28 de febrero del 
2014. Ver www.uci.cu
________________________________________________________________________________________________
III Escuela Internacional de Invierno en la UCI del 17 al 28 de febrero del 
2014. Ver www.uci.cu

Reply via email to