我想做这个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 有这种可能性吗
6条答案
按热度按时间s71maibg1#
分面将为您获得一个包含字段的不同值的结果集。
例如
你应该得到这样的回报:
查看wiki了解更多信息。面化是solr中非常酷的一部分。享受:)
http://wiki.apache.org/solr/SimpleFacetParameters#Facet_Fields
注意:分面将显示索引值,即在应用了所有过滤器之后。一种解决方法是使用copyfield方法,这样你就可以创建一个分面版本的txt字段。这样你的结果将显示原始值。
维基上有很多关于刻面的文档。或者我确实写了一些带有屏幕截图的文档。你可以在这里查看:
http://www.craftyfella.com/2010/01/faceting-and-multifaceting-syntax-in.html
os8fio9y2#
对于问题中的
DISTINCT
部分,我想您可能会寻找Solr的field collapsing / grouping functions,它将使您能够指定一个字段,您希望从中获得唯一的结果,根据这些唯一值创建一个组,它将显示该组中有多少个文档。然后可以使用存储在单独字段中的相同
substr
,并在该字段上折叠。ne5o7dgx3#
使用带有参数
stats.calcdistinct
的StatsComponent获取特定字段的不同值列表:太阳能电池7 https://lucene.apache.org/solr/guide/7_7/the-stats-component.html
太阳能电池6 https://cwiki.apache.org/confluence/display/solr/The+Stats+Component
它还将提供不同值的计数。
stats.calcdistinct
可能从Python 4.7开始就可用了。http://wiki.apache.org/solr/StatsComponent已过时,因为它不包含
stats.calcdistinct
示例
与刻面的差异
在facet的情况下,你需要知道请求所有的计数,或者你设置facet.limit为一个非常高的值,然后自己计算结果。另外,你需要一个字符串字段来使facet按照你需要的方式工作。
watbbzwu4#
我将子字符串存储在不同的字段中(让我们调用
txt_substring
),然后在txt_substring
上创建facet,如CraftyFella所示。通常我会使用n-gram tokenizer,但我不认为你可以在这方面。
ukqbszuj5#
Solr 5.1和更高版本提供了新的Facet Module,它集成了对查找字段中唯一值数量的支持,您甚至可以查找Facet的每个bucket的字段中唯一值的数量,并按该值排序以查找唯一值的最大或最小数量。
“myfield”中唯一值的数量:json.facet={x:“唯一(myfield)”}
按“类别”字段分面,并针对每个类别,以“颜色”显示唯一值的数量:
这在Solr 5.1和更高版本中。
of1yzvn46#
查找“myfield”中唯一值数量的最佳方法是使用
JSON API
: