1

I have implemented a Solr suggest handler to deal with autocomplete suggestions from my app. However, I need to be able to filter these results based on user privileges. Essentially, this could be ensuring that one of the returned fields matches a key (username for instance).

My schema looks like this (autocomplete fields):

<!-- suggest fields --> 
<field name="name_suggest" type="text_suggest" indexed="true" stored="false" multiValued="true" /> 
<field name="name_suggest_suggest_edge" type="text_suggest_edge" indexed="true" stored="false" multiValued="true" /> 
<field name="name_suggest_suggest_ngram" type="text_suggest_ngram" indexed="true" stored="false" multiValued="true" /> 
<field name="name_suggest_s" type="alphaNumericSort" indexed="true" stored="false" multiValued="true" /> 

<!-- copy fields -->    
<copyField source="firstName" dest="name_suggest" />
<copyField source="firstName" dest="name_suggest_suggest_edge" />
<copyField source="firstName" dest="name_suggest_suggest_ngram" />
<copyField source="firstName" dest="name_suggest_s" />    
<copyField source="lastName" dest="name_suggest" />
<copyField source="lastName" dest="name_suggest_suggest_edge" />
<copyField source="lastName" dest="name_suggest_suggest_ngram" />
<copyField source="lastName" dest="name_suggest_s" />     
<copyField source="id" dest="customerID" />

And the suggest handler in SolrConfig:

!-- request handler to return typeahead suggestions -->
<requestHandler name="/suggest" class="solr.SearchHandler">
   <lst name="defaults">
      <str name="echoParams">explicit</str>
      <str name="defType">edismax</str>
      <str name="rows">10</str>
      <str name="fl">firstName, lastName, address1, customerID,score</str>
      <str name="qf">name_suggest^30 name_suggest_suggest_edge^50.0</str>
      <str name="pf">name_suggest_suggest_edge^50.0</str>
      <str name="group">false</str>
      <str name="group.field">name_suggest_s</str>
      <str name="sort">score desc</str>
      <str name="group.sort">score desc</str>
   </lst>
</requestHandler>

How can I filter the results coming from this handler (preferably without having to do it in memory consumer-side)?

rakesh pakkam
  • 144
  • 11
PizzaTheHut
  • 637
  • 2
  • 6
  • 20

1 Answers1

0

You can filter the suggestions like you can filter a search. Use the cfq instead of the Solr fq parameter.

suggest.cfq A Context Filter Query used to filter suggestions based on the context field, if supported by the suggester.

Note:

Context filtering (suggest.cfq) is currently only supported by AnalyzingInfixLookupFactory and BlendedInfixLookupFactory, and only when backed by a Document*Dictionary. All other implementations will return unfiltered matches as if filtering was not requested.

Source https://lucene.apache.org/solr/guide/6_6/suggester.html#Suggester-SuggestRequestHandlerParameters

outofBounds
  • 594
  • 6
  • 18