Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Select 如何使用Solr选择不同的字段值?_Select_Solr - Fatal编程技术网

Select 如何使用Solr选择不同的字段值?

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

我想用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_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)'}}