1

アプリからのオートコンプリートの提案を処理するために、Solr の提案ハンドラーを実装しました。ただし、ユーザー権限に基づいてこれらの結果をフィルタリングできる必要があります。基本的に、これは、返されたフィールドの 1 つがキー (たとえば、ユーザー名) と一致することを保証することができます。

私のスキーマは次のようになります (オートコンプリート フィールド):

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

このハンドラーからの結果をフィルターするにはどうすればよいですか (できれば、コンシューマー側のメモリで実行する必要はありません)。

4

1 に答える 1