I am also very confused at the use case for the Suggester component.
With collate on, it will try to combine random words together not the
actual phrases that are there.

I get better mileage out of EDGE grams and tokenize on whitespace...
Left to right... Since that is how most people think.

However, I would like Suggester to work as follows:

Index:
Chris Smith
Tony Dawson
Chris Leaf
Daddy Golucky

Query:
1. "Chris" it returns "Chris Leaf" but not both Chris Smith and Chris Leaf.
2. I seem to get collated (take first work and combine with second
word). SO I would see things like "Smith Leaf".... Very strange and
not what we expect. These are formal names.

When I use Ngrams.... I can index:

C
Ch
Chr
Chri
Chris
S
Sm
Smi
Smit
Smith

Thus if I search on "Smi" it will match Chris Smith and also Chris
Leaf. Exactly what I want.




On Tue, Mar 27, 2012 at 11:05 AM, Rémy Loubradou <r...@hipsnip.com> wrote:
> Hello, I am working on creating a auto-complete functionality for my field
> merchant_name present all over my documents. I am using the version 3.4 of
> Solr and I am trying to take advantage of the Suggester functionality.
> Unfortunately so far I didn't figure out how to make it works as  I
> expected.
>
> If my list of merchants present in my documents is:(my real list is bigger
> than the following list, that's the reason why I don't use dictionnary and
> also because it will change often.)
> Redoute
> Suisse Trois
> Conforama
> But
> Cult Beauty
> Brother Trois
>
> I expect from the Suggester component to match words or part of them and
> return phrases where words or part of them have been matched.
> for example with /suggest?q=tro, I would like to get this:
>
> <response>
> <lst name="responseHeader">
> <int name="status">0</int>
> <int name="QTime">0</int>
> </lst>
> <lst name="spellcheck">
> <lst name="suggestions">
> <lst name="tro">
> <int name="numFound">2</int>
> <int name="startOffset">0</int>
> <int name="endOffset">x</int>
> <arr name="suggestion">
> <str>Bother Trois</str>
> <str>Suisse Trois</str>
> </arr>
> </lst>
> </lst>
> </lst>
> </response>
>
> I experimented suggestion on a field configured with the tokenizer
> "solr.KeywordTokenizerFactory" or "solr.WhitespaceTokenizerFactory".
> In my mind I have to find a way to handle 3 cases:
> /suggest?q=bo ->(should return) bother trois
> /suggest?q=tro ->(should return) bother trois, suisse trois
> /suggest?q=bo%20tro ->(should return) bother trois
>
> With the "solr.KeywordTokenizerFactory" I get:
> /suggest?q=bo -> bother trois
> /suggest?q=tro -> "nothing"
> /suggest?q=bo%20tro -> "nothing"
>
> With the "solr.WhitespaceTokenizerFactory" I get:
> /suggest?q=bo -> bother
> /suggest?q=troi -> trois
> /suggest?q=bo%20tro -> bother, trois
>
> Not exactly what I want ... :(
>
> My configuration in the file solrconfig.xml for the suggester component:
>
> <searchComponent class="solr.SpellCheckComponent" name="suggestMerchant">
>    <lst name="spellchecker">
>      <str name="name">suggestMerchant</str>
>      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
>      <str
> name="lookupImpl">org.apache.solr.spelling.suggest.fst.FSTLookup</str>
>      <!-- Alternatives to lookupImpl:
>           org.apache.solr.spelling.suggest.fst.FSTLookup   [finite state
> automaton]
>           org.apache.solr.spelling.suggest.fst.WFSTLookupFactory [weighted
> finite state automaton]
>           org.apache.solr.spelling.suggest.jaspell.JaspellLookup [default,
> jaspell-based]
>           org.apache.solr.spelling.suggest.tst.TSTLookup   [ternary trees]
>      -->
>      <str name="field">merchant_name_autocomplete</str>  <!-- the indexed
> field to derive suggestions from -->
>      <float name="threshold">0.0</float>
>      <str name="buildOnCommit">true</str>
> <!--
>      <str name="sourceLocation">american-english</str>
> -->
>    </lst>
>  </searchComponent>
>  <requestHandler class="org.apache.solr.handler.component.SearchHandler"
> name="/suggest/merchant">
>    <lst name="defaults">
>      <str name="spellcheck">true</str>
>      <str name="spellcheck.dictionary">suggestMerchant</str>
>      <str name="spellcheck.onlyMorePopular">true</str>
>      <str name="spellcheck.count">10</str>
>      <str name="spellcheck.collate">true</str>
>      <int name="spellcheck.maxCollations">10</int>
>    </lst>
>    <arr name="components">
>      <str>suggestMerchant</str>
>    </arr>
>  </requestHandler>
>
> How can I implement autocomplete with the Suggester component to get what I
> expect? Thanks for your help, I really appreciate.



-- 
Bill Bell
billnb...@gmail.com
cell 720-256-8076

Reply via email to