3

製品、ページなど、さまざまなカテゴリの solr データベースに多数のレコードがあるとします。一致した合計とカテゴリの合計を表示できるように、カウントを取得する方法はありますか。

何かのようなもの:

「朝食」で検索しました

朝食に一致するページ: 37 /500 朝食に一致する製品: 7 /100

等々。

ループできるある種の構造でこれを取得できればボーナスポイント、ala this pseudocode:

print "You searched for %s\n" % term
for category, match_count, total_count in categories:
    print "%ss matching %s: %d/%d\n" % (category, match_count, total_count)

これは言語に依存しません。API を使用せずに、GET リクエストを使用して直接 solr インデックスにアクセスする予定です。

4

1 に答える 1

6

与えられた

スキーマ(3 つのフィールド、すべて文字列型 (solr.StrField)):

  • ID
  • 題名
  • カテゴリー

入力データ:

  • 4 カテゴリ - 商品、ページ、投稿、その他
  • 4 タイトル - 朝食、昼食、夕食、夕食

索引:

  • タイトル/カテゴリがランダムな 1000 ドキュメント

リクエスト

特定の結果をカウントするために、ファセットを使用できます。

  • 検索クエリ (すべてのドキュメントを検索):

    q=*:*

  • フィルター クエリ (特定の入力要求をフィルター処理し、タグでマークする):

    &fq={!tag=dt}title:朝食

  • ファセット:

    • ファセットをオンにする

      &facet=真

    • カテゴリ情報のみが必要な場合は、結果をオフにします

      &rows=0

    • 一致数を取得する

      &facet.field=カテゴリ

    • 合計数を取得する(提供されたfilterQueryを除くカテゴリごとの数)

      &facet.field={!ex=dt key=total_category}カテゴリ

最終的なクエリは次のようになります。

http://localhost:8983/solr/stack19733827/select?q=*%3A*&fq=%7B!tag%3Ddt%7Dtitle%3Abreakfast&rows=0&wt=xml&indent=true&facet=true&facet.field=category&facet.field={!ex =dt%20key=total_category}カテゴリ

結果

リクエストも含むレスポンスの例を次に示します。

<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">0</int>
  <int name="QTime">1</int>
  <lst name="params">
    <str name="q">*:*</str>
    <arr name="facet.field">
      <str>category</str>
      <str>{!ex=dt key=total_category}category</str>
    </arr>
    <str name="indent">true</str>
    <str name="fq">{!tag=dt}title:breakfast</str>
    <str name="rows">0</str>
    <str name="wt">xml</str>
    <str name="facet">true</str>
    <str name="_">1383337530565</str>
  </lst>
</lst>
<result name="response" numFound="262" start="0">
</result>
<lst name="facet_counts">
  <lst name="facet_queries"/>
  <lst name="facet_fields">
    <lst name="category">
      <int name="other">75</int>
      <int name="page">65</int>
      <int name="product">62</int>
      <int name="post">60</int>
    </lst>
    <lst name="total_category">
      <int name="other">260</int>
      <int name="product">253</int>
      <int name="page">250</int>
      <int name="post">237</int>
    </lst>
  </lst>
  <lst name="facet_dates"/>
  <lst name="facet_ranges"/>
</lst>
</response>

必要な情報がファセットに含まれています。

  • total_category - カテゴリ内のドキュメントの総数
  • カテゴリ- フィルタ クエリに一致したカテゴリ内のドキュメントの数
  • ファセットの名前 - カテゴリの名前

ボーナス:

  • タイトルの朝食の合計試合 - すべてのカテゴリで 262
于 2013-11-01T20:46:13.057 に答える