Select 如何使用Solr选择不同的字段值?
我想用Solr作为我的数据存储,做与这个SQL等价的事情Select 如何使用Solr选择不同的字段值?,select,solr,Select,Solr,我想用Solr作为我的数据存储,做与这个SQL等价的事情 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_tab
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?刻面的任何可能性都会得到一个结果集,其中包含字段的不同值 例如 你应该得到这样的回报:
<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>
02
100
80
5.
2.
1.
有关更多信息,请查看wiki。刻面是solr中非常酷的一部分。享受:)
注:刻面将显示索引值,即在应用所有过滤器之后。解决这个问题的一种方法是使用copyfield方法,这样您就可以创建txt字段的方面版本。这样,您的结果将显示原始值
希望对你有帮助。。wiki上提供了大量关于刻面的文档。或者我写了一些屏幕截图。。您可以在此处查看:
我将子字符串存储在不同的字段中(让我们调用
txt\u子字符串
),然后在txt\u子字符串上刻面,如CraftyFella所示
通常我会使用,但我不认为你可以在这一点上分面。对于你问题的不同部分,我认为你可能在寻找Solr的。它将使您能够指定要从中获得唯一结果的字段,根据这些唯一值创建一个组,并显示该组中有多少文档
然后,您可以使用存储在单独字段中的相同的substr
,并在该字段上折叠。使用带有参数stats.calcdistinct的StatsComponent来获取特定字段的不同值列表:
Solr 7
Solr 6
它还将为您提供不同值的计数。
stats.calcdistinct
可能从4.7版开始提供
已过时,因为它不包含统计信息。calcdistinct
例子
不同方面的差异
对于facet,您需要知道请求all的计数,或者将facet.limit设置为非常高的值,然后自己计算结果。此外,您还需要一个字符串字段,以使Facet按此处所需的方式工作。Solr 5.1及更高版本具有新的Facet模块,该模块集成了对查找字段中唯一值数量的支持。您甚至可以在一个字段中为一个方面的每个bucket找到唯一值的数量,并按该值排序以找到唯一值的最高或最低数量
“myfield”中唯一值的数目:
facet={x:'unique(myfield)}
“类别”字段的刻面,对于每个类别,以“颜色”显示唯一值的数量:
这在Solr5.1及更高版本中。更多像“unique”这样的方面函数显示在中,这是使用JSON API在“myfield”中查找唯一值数量的最佳方法:
http://YourCollectionAddress/select?json
={query:'\*:\*',limit:0,facet:{distinctCount:'unique(myfield)'}}
正是他所需要的。正是我所需要的,根据字段类型,您可以使用(左锚定)通配符。但通常情况下,任何索引技术的最佳解决方案都是预测问题。也就是说,如果您知道您将定期搜索SUBSTR(txt,0,3),那么您将在索引中创建一个由该子字符串填充的字段。相反,如果“txt”和子字符串长度是可变的,那么n-gram或其他处理是最好的方法。据我所知,组或字段折叠不能用于多值字段!我通过谷歌搜索solr distinct得到了这个答案。但需要多个字段。类似于distinct country,user。通过索引多字段(field1+“+field2”)解决了多字段问题。现在我需要知道有多少不同的字段1,字段2。有超过200万的油田。下面给了我一个提示:不知道如何在没有json的情况下实现这一点,但它看起来像:q=type:1&start=0&rows=0&json.facet={uniquecount:“unique(field1field2_s)”}
如何检索所有(即>100)字段中的唯一值?如果我们在已标记的字段上刻面,这将不起作用。这用于计算有多少不同的字段值,但不会返回它们
/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}}}}
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
}
}}
}
http://YourCollectionAddress/select?json
={query:'\*:\*',limit:0,facet:{distinctCount:'unique(myfield)'}}