如何使用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,如“独特”;