3

cmsのアクセス権に対応するSolr検索結果をフィルタリングする必要があります(drupal 7 +ビットマスクに基づくカスタムアクセス制御メカニズム)。

整数フィールドのビット演算に基づく検索結果フィルタリング用のSolrQParserPluginプラグインがあります:https ://issues.apache.org/jira/browse/SOLR-1913 。

Drupalモジュールsearch_api_solrとsolrconfig.xmlによって提供されるschema.xmlを使用して、tomcat6(debianシステム上)でSolr 3.6.1(+ /var/lib/tomcat6/solr/lib/bitwise_filter_plugin.jarのプラグイン)を使用しています。モジュールの発行キューにあります(SOLR-1913の発行に示されているように拡張されています)。

Solrクエリ..。

http://solr:8080/solr/select?qf=t_title&fl=*,score&fq={!bitwise field=is_bitmask op=AND source=1234}*

...エラーログに次のメッセージが表示されて失敗します。

Sep 27, 2012 8:57:41 AM org.apache.solr.core.SolrCore execute
INFO: [] webapp=/solr path=/select params={qf=t_title&fl=*,score&fq={!bitwise+field%3Dis_bitmask+op%3DAND+source%3D1234}} status=500 QTime=15 
Sep 27, 2012 8:57:41 AM org.apache.solr.common.SolrException log
SEVERE: java.lang.NullPointerException
  at org.apache.lucene.search.FilteredQuery.hashCode(FilteredQuery.java:268)
  at java.util.AbstractList.hashCode(AbstractList.java:542)
  at org.apache.solr.search.QueryResultKey.<init>(QueryResultKey.java:49)
  at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1084)
  at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:375)
  at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:394)
  at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:186)
  at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:129)
  at org.apache.solr.core.SolrCore.execute(SolrCore.java:1376)
  at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:365)
  at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:260)
  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
  at java.lang.Thread.run(Thread.java:636)

エラーメッセージで確認できるのは、プラグインがsolrによって呼び出されていることだけです。

助けていただければ幸いです、ありがとう。

4

1 に答える 1

5

Solr に独自の方法で実行させるのではなく、Solr の方法で試してみることをお勧めします。Solr はすでにブール論理を実装しています。

ビットフィールドを一連の名前付きブール フィールドに分割します。インスピレーションが不足している場合は、bit_0、bit_1 などにすることもできます。動的フィールドを使用して入力を節約し、後で拡張できるようにすることができます。

ドキュメントごとに bit_0:true などのようにインデックスを付けます。

フィルター クエリでこれらのフィールドを使用して選択を行います: bit_0:true AND bit_24:true。

これは、各フィールドのビットごとの比較よりもはるかに高速に実行される可能性があります。ビットごとの比較では、おそらくクエリごとに完全なテーブル スキャンが必要です。Solr にはテーブルがないため、フィールド値全体をスキャンします。

于 2012-11-27T23:00:22.777 に答える