Solr 8.6.2 - 単一クエリを2つのコアに実行することは可能ですか?

トピック作成者:ks-solruserml-bot (2024/05/28 19:54 投稿)
1
CloseClose

(The bot translated the original post https://lists.apache.org/thread/m82cbr8xyc3vswo50mkyp77npyhd82lr into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

私は2つのコア「live」と「archive」を持っており、それぞれのフィールドは完全に同じです。

ユニークID「posting_id」でクエリを実行したいです。最初に「live」をチェックし、見つからない場合は「archive」をチェックして結果を表示したいです。

以下のクエリは「live」で検索を行い、「archive」では検索を行いません:

http://xxx:8983/solr/live/select?q=*:*&fq=posting_id:41009261&indent=true&shards=archive

以下のクエリはエラーを返します:

http://xxx.yyy.zzz.aaa:8983/solr/live/select?q=*:*&fq=posting_id:41009261&indent=true&shards=xxx.yyy.zzz.aaa:8983/solr/archive

エラーメッセージは以下の通りです:

<response>
  <lst name="responseHeader">
    <int name="status">401</int>
    <int name="QTime">10</int>
    <lst name="params">
      <str name="q">*:*</str>
      <str name="shards">xxx.yyy.zzz.aaa:8983/solr/archive</str>
      <str name="indent">true</str>
      <str name="fq">posting_id:41009261</str>
      <str name="wt">xml</str>
    </lst>
  </lst>
  <lst name="error">
    <lst name="metadata">
      <str name="error-class">org.apache.solr.client.solrj.impl.BaseHttpSolrClient$RemoteSolrException</str>
      <str name="root-error-class">org.apache.solr.client.solrj.impl.BaseHttpSolrClient$RemoteSolrException</str>
    </lst>
    <str name="msg">Error from server at null: Expected mime type application/octet-stream but got text/html.
      <html>
        <head>
          <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
          <title>Error 401 Unauthorized</title>
        </head>
        <body>
          <h2>HTTP ERROR 401 Unauthorized</h2>
          <table>
            <tr><th>URI:</th><td>/solr/archive/select</td></tr>
            <tr><th>STATUS:</th><td>401</td></tr>
            <tr><th>MESSAGE:</th><td>Unauthorized</td></tr>
            <tr><th>SERVLET:</th><td>default</td></tr>
          </table>
        </body>
      </html>
    </str>
    <int name="code">401</int>
  </lst>
</response>

2つのコアに対して単一のクエリを実行するにはどうすればよいですか?

solr.in.shに以下を追加しました:

SOLR_OPTS="$SOLR_OPTS -Dsolr.disable.shardsWhitelist=true"
返信投稿者:ks-solruserml-bot (2024/05/28 19:54 投稿)

こんにちは、Anuj。

最初に思い浮かんだ解決策は、ストリーミング式を使用することです。

leftOuterJoinを使うことができます:

https://solr.apache.org/guide/8_6/stream-decorator-reference.html#leftouterjoin

例:

leftOuterJoin(
  search(archive, q="postings_id:123", qt="/select", fl="postings_id", sort="postings_id asc")
  search(live, q="postings_id:123", qt="/select", fl="postings_id", sort="postings_id asc")
  on="postings_id"
)

もし、liveコレクションにpostings_id:123を持つドキュメントが見つかった場合、それが使用されます。そうでなければ、archiveコレクションからのドキュメントが返されます。これは「右側」(live)からのドキュメントが「左側」(archive)に値を上書きするためです。他の必要なフィールドをflパラメータに追加してください。

役に立てば幸いです。

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?