2

Solr インデックス内のすべてのドキュメントには、ドキュメントが Solr に追加された ISO 8601 日付を含む「追加」フィールドがあります。

<result name="response" numFound="34587104" start="0">
    <doc>
        <date name="added">2013-03-04T01:00:26Z</date>
        <str name="text">Hello, world!</str>
        <str name="id">93416604d274d28a44e14a9535bb9e6e1db3d851</str>
        <str name="_version_">1428536769315340290</str>
    </doc>
<result/>

ドキュメントが削除されないと仮定すると、1 日あたりインデックスに存在するドキュメントの数をどのようにカウントできますか? たとえば、2013 年 3 月 5 日にインデックスに含まれていたドキュメントの数を知るために、クエリを実行できますq=added:[* TO 2013-03-05T00:00:00Z]。ただし、1 か月前から今日まで、毎日インデックスに含まれていたドキュメントの数を知る必要があります。

解決策の 1 つは、1 か月前の日付にインデックスに含まれていたドキュメントの数をクエリし、毎日追加されたドキュメントの数をファセットして、累積カウントに追加することです。擬似コード:

initial_count = q=added:[* TO NOW/MONTH-1MONTH]
running_total = initial_count;
daily_added_array = facet.range=added
                    & f.added.facet.range.start=NOW/MONTH-1MONTH
                    & f.added.facet.range.end=NOW/DAY-1DAY
                    & f.added.facet.range.gap=+1DAY

foreach (daily_added_array as day) {
    running_total += day;
    printf(running_total);
}

ただし、この方法は非常に壊れやすく、エラーが発生しやすいようです。

1 日あたりのインデックス内のドキュメントの累積量を取得する方法はありますか?

4

2 に答える 2

2

Solrのバージョンによっては、Grouping(別名Field Collapsing)とgroup.funcパラメーターを組み合わせて使用​​できます。 http://wiki.apache.org/solr/FieldCollapsing

set rows = 0&group.field = added&group.func = rint(div(ms(added)、mul(24、mul(60、mul(60,1000)))))

後者の関数はミリ秒に変換され、日に丸められます。返されるグループの数はあなたが望むものです。先月などでお好きなようにフィルタリングできます

于 2013-03-19T14:34:57.807 に答える