如何使用Solrselect不同的字段值?
我想做这个SQL的等价物,但是用Solr作为我的数据存储。
SELECT DISTINCT txt FROM my_table;
什么语法会强制Solr只给我不同的值?
http://localhost:8983/solr/select?q=txt:?????&fl=txt
编辑:所以多面search似乎适合,但正如我调查,我意识到我只有详细的一半的问题。
我的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
注:分面将显示索引值,即所有滤镜已应用后。 解决此问题的一种方法是使用copyfield方法,以便可以创buildtxt字段的方面版本。 这样你的结果将显示原始值。
希望这有助于..维基上可用的许多文档。 或者我写了一些屏幕截图..你可以看看这里:
http://www.craftyfella.com/2010/01/faceting-and-multifaceting-syntax-in.html
对于你的问题的DISTINCT
部分,我想你可能正在寻找Solr的域折叠/分组function 。 它可以让你指定一个你想得到唯一结果的字段,在这些唯一的值上创build一个组,并且会显示这个组有多less个文档。
然后,您可以使用存储在单独字段中的相同substr
,然后折叠。
我会将子string存储在不同的字段中(让我们在txt_substring
调用),然后将txt_substring
作为CraftyFella显示的txt_substring
中的方面。
通常我会使用n-gram标记器 ,但我不认为你可以在这方面。
使用带有参数stats.calcdistinct
来获取特定字段的不同值列表:
https://cwiki.apache.org/confluence/display/solr/The+Stats+Component
它也会给你不同的价值。 (在facet的情况下,你需要知道要求所有的计数,或者你将facet.limit设置为非常高的值,并且自己计算结果。另外,你需要一个string字段来使facet按照你需要的方式工作。 )
http://wiki.apache.org/solr/StatsComponent已经过时,因为它不包含;stats.calcdistinct
stats.calcdistinct
可能从4.7开始。
例:
/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}}}}
看看多面search
Solr 5.1及更高版本具有新的Facet模块,该模块集成了用于查找字段中唯一值数量的支持。 您甚至可以在一个构面的每个桶的字段中查找唯一值的数量,然后按该值sorting以查找唯一值的最高或最低数量。
“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/显示了更多方面的function,如“独特”;