I tried to setup an autosuggest feature with multiple dictionaries for
title , author and publisher fields.

I used the solr.EdgeNGramFilterFactory to optimize the performance of the
auto suggest.

I have a document in the index with title: Romana.

When I test the text analysis for auto suggest (on filed of
title_suggest_ngram):
ENGTF
textraw_bytesstartendpositionLengthtypeposition
rom[72 6f 6d]061word1roma[72 6f 6d 61]061word1roman[72 6f 6d 61 6e]061word1
romana[72 6f 6d 61 6e 61]061word1
If I try to run http://localhost:8983/solr/bandw/suggest?q=Roma, I get:
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
</lst>
<lst name="suggest">
<lst name="suggest_publisher">
<lst name="Roma">
<int name="numFound">0</int>
<arr name="suggestions"/>
</lst>
</lst>
<lst name="suggest_title">
<lst name="Roma">
<int name="numFound">0</int>
<arr name="suggestions"/>
</lst>
</lst>
<lst name="suggest_author">
<lst name="Roma">
<int name="numFound">0</int>
<arr name="suggestions"/>
</lst>
</lst>
</lst>
</response>

my relevant field definitions:
<field name="id" type="string" indexed="true" stored="true" required="true"
multiValued="false" omitNorms="true" />
   <field name="author" type="text_hu" indexed="true" stored="true"
multiValued="true"/>
   <field name="title" type="text_hu" indexed="true" stored="true"
multiValued="false"/>
   <field name="subtitle" type="text_hu" indexed="true" stored="true"
multiValued="false"/>
   <field name="publisher" type="text_hu" indexed="true" stored="true"
multiValued="false"/>
<field name="title_suggest_ngram" type="text_hu_suggest_ngram"
indexed="true" stored="false" multiValued="false" omitNorms="true"/>
   <field name="author_suggest_ngram" type="text_hu_suggest_ngram"
indexed="true" stored="false" multiValued="false" omitNorms="true"/>
   <field name="publisher_suggest_ngram" type="text_hu_suggest_ngram"
indexed="true" stored="false" multiValued="false" omitNorms="true"/>
   <copyField source="title" dest="title_suggest_ngram"/>
   <copyField source="author" dest="author_suggest_ngram"/>
   <copyField source="publisher" dest="publisher_suggest_ngram"/>

My EdgeNGram related field type definition:
<fieldType name="text_hu_suggest_ngram" class="solr.TextField"
positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords_hu.txt"
                />
        <filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="3"
maxGramSize="8"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory"
                ignoreCase="true"
                words="stopwords_hu.txt"
                />
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
</fieldType>

My requesthandler for suggest:
<requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="suggest">true</str>
<str name="suggest.count">5</str>
<str name="suggest.dictionary">suggest_author</str>
<str name="suggest.dictionary">suggest_title</str>
<str name="suggest.dictionary">suggest_publisher</str>
</lst>
<arr name="components">
<str>suggest</str>
</arr>
  </requestHandler>

And finally my searchcomponent:
<searchComponent name="suggest" class="solr.SuggestComponent">
<lst name="suggester">
<str name="name">suggest_title</str>
<str name="lookupImpl">FSTLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">title_suggest_ngram</str>
<str name="wightField">price</str>
<str name="builOnStartup">true</str>
<str name="buildOnCommit">true</str>
</lst>
<lst name="suggester">
<str name="name">suggest_author</str>
<str name="lookupImpl">FSTLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">author_suggest_ngram</str>
<str name="wightField">price</str>
<str name="builOnStartup">true</str>
<str name="buildOnCommit">true</str>
</lst>
<lst name="suggester">
<str name="name">suggest_publisher</str>
<str name="lookupImpl">FSTLookupFactory</str>
<str name="dictionaryImpl">DocumentDictionaryFactory</str>
<str name="field">publisher_suggest_ngram</str>
<str name="wightField">price</str>
<str name="buildOnCommit">true</str>
</lst>
  </searchComponent>
If I change the search component definition to use title field instead of
title_suggest_ngram tahn I manage to get suggest results only if my title
field starts with the string specified in q parameter.
As a filed level autosuggester I would suggest also those matches which are
not the first term of the title but any of them.
What shall I make to use autosuggest correctly?

-- 
<https://www.linkedin.com/pub/roland-sz%C5%B1cs/28/226/24/hu>Roland Szűcs
<https://www.linkedin.com/pub/roland-sz%C5%B1cs/28/226/24/hu>Connect with
me on Linkedin <https://www.linkedin.com/pub/roland-sz%C5%B1cs/28/226/24>
<https://bookandwalk.hu/>CEOPhone: +36 1 210 81 13Bookandwalk.hu
<https://bokandwalk.hu/>

Reply via email to