このSQLと同等のことをしたいのですが、データストアとしてSolrを使用します。
SELECT
DISTINCT txt
FROM
my_table;
Solrに個別の値のみを強制する構文はどのようなものですか?
http://localhost:8983/solr/select?q=txt:?????&fl=txt
編集:ファセット検索は適合しているように見えますが、調査したところ、問題の半分しか詳しくないことに気付きました。
私のSQLクエリは読むべきです...
SELECT
DISTINCT SUBSTR(txt,0,3)
FROM
my_table;
Solrでこの可能性はありますか?
ファセットは、フィールドの個別の値を含む結果セットを取得します。
例えば。
http://localhost:8983/solr/select/?q=*%3A*&rows=0&facet=on&facet.field=txt
次のようなものを取得する必要があります。
<response>
<responseHeader><status>0</status><QTime>2</QTime></responseHeader>
<result numFound="4" start="0"/>
<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="txt">
<int name="value">100</int>
<int name="value1">80</int>
<int name="value2">5</int>
<int name="value3">2</int>
<int name="value4">1</int>
</lst>
</lst>
</lst>
</response>
詳細については、Wikiをご覧ください。ファセットは、solrの非常にクールな部分です。楽しい :)
http://wiki.Apache.org/solr/SimpleFacetParameters#Facet_Fields
注:ファセットにはインデックス付きの値が表示されます。すべてのフィルターが適用された後。これを回避する1つの方法は、copyfieldメソッドを使用して、txtフィールドのファセットバージョンを作成できるようにすることです。これにより、結果に元の値が表示されます。
それが助けてくれることを願っています。または、スクリーンショットを使用していくつかを書きました。ここで確認できます。
http://www.craftyfella.com/2010/01/faceting-and-multifaceting-syntax-in.html
質問のDISTINCT
部分については、Solrの フィールドの折りたたみ/グループ化関数 を探しているのではないかと思います。一意の結果が必要なフィールドを指定し、それらの一意の値でグループを作成し、そのグループのドキュメント数を表示できます。
その後、別のフィールドに保存されている同じsubstr
を使用し、その上で折りたたみます。
サブストリングを別のフィールドに保存し(txt_substring
で呼び出しましょう)、CraftyFellaが示したようにtxt_substring
のファセットを作成します。
通常、私は n-gram tokenizer を使用しますが、それについてファセットできるとは思いません。
特定のフィールドの個別の値のリストを取得するには、パラメーターstats.calcdistinct
を使用してStatsComponentを使用します。
Solr 7 https://lucene.Apache.org/solr/guide/7_7/the-stats-component.html
Solr 6 https://cwiki.Apache.org/confluence/display/solr/The+Stats+Component
また、個別の値のカウントも提供します。 stats.calcdistinct
はおそらく4.7以降で利用可能です。
http://wiki.Apache.org/solr/StatsComponent はstats.calcdistinct
をカバーしていないため古くなっています
/select?stats=on&stats.field=region&rows=0&stats.calcdistinct=true
"stats":{
"stats_fields":{
"region":{
"min":"GB",
"max":"GB",
"count":20276,
"missing":0,
"distinctValues":["GB"],
"countDistinct":1}}}}
ファセットの場合、すべてを要求するにはカウントを知る必要があります。または、facet.limitを本当に高い値に設定して、結果を自分でカウントする必要があります。また、ファセットをここで必要な方法で機能させるには、文字列フィールドが必要です。
Solr 5.1以降には、フィールド内の一意の値の数を検索するためのサポートが統合された新しいファセットモジュールがあります。ファセットの各バケットのフィールドで一意の値の数を見つけ、その値でソートして、一意の値の最大数または最小数を見つけることもできます。
「myfield」の一意の値の数:json.facet = {x: 'unique(myfield)'}
「カテゴリ」フィールドによるファセット、および各カテゴリについて、一意の値の数を「色」で表示します。
json.facet={
cat_breakdown : { terms : { // group results by unique values of "category"
field : category,
facet : {
x : "unique(color)", // for each category, find the number of unique colors
y : "avg(price)" // for each category, find the average price
}
}}
}
これはSolr 5.1以降にあります。 「ユニーク」などのその他のファセット関数は http://yonik.com/solr-facet-functions/ に示されています
ファセット検索をご覧ください
JSON API
を使用して、「myfield」で一意の値の数を見つける最良の方法:
http://YourCollectionAddress/select?json
={query:'\*:\*',limit:0,facet:{distinctCount:'unique(myfield)'}}