2015-09-25 43 views
1

我已經實現了一個Solr建議處理程序來處理來自我的應用程序的自動填充建議。但是,我需要能夠根據用戶權限篩選這些結果。實質上,這可以確保其中一個返回的字段匹配一個鍵(例如用戶名)。如何過濾Solr Autocomplete/Suggest?

我的模式是這樣的(自動完成字段):

<!-- 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" /> 

而且在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> 

如何過濾從該處理程序來的結果(最好不必須在內存消費者方面做到這一點)?

回答

0

您可以像過濾搜索一樣過濾建議。使用cfq而不是Solr fq參數。

suggest.cfq 上下文過濾器查詢用於根據上下文字段過濾建議(如果建議者支持)。

注:

上下文濾波(suggest.cfq)目前只有 AnalyzingInfixLookupFactory和BlendedInfixLookupFactory支撐,並且僅 當由文檔*字典支持。所有其他實現將 返回未過濾的匹配,就好像沒有請求過濾一樣。

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