Solr 6.6.2分组查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Solr 6.6.2分组查询相关的知识,希望对你有一定的参考价值。

在Solr 6.6.2上进行以下设置:

Solr云集合,其文档具有字段ID,ContactId,属性启动和运行以及id上的唯一键。

可以有多个具有相同ContactId的文档。

每个联系人文档都有一个包含一行文本的文本字段属性。属性字段用','分隔索引,例如,属性:绿色命中。

例如:

+----+-----------+--------------+
| ID | ContactId |  Properties  |
+----+-----------+--------------+
|  1 | C1        | Blue,Green   |
|  2 | C1        | Blue,Yellow  |
|  3 | C2        | Green,Yellow |
+----+-----------+--------------+

现在我需要找到所有ContactIds,其中Properties具有“Green”和“Yellow”,允许此查询匹配此ContactID的所有文档。因此结果将是C1,C2。

我试图对结果进行分组,但我仍然无法查询分组结果。

group=true&group.field=ContactId&group.query=(Green AND Yellow)&q=(Green OR Yellow)

我遵循的想法是查询(q)获取所有具有绿色或黄色的文档,而不是组中的分组。字段ContactId,然后是具有AND条件绿色和黄色的group.query。但那并没有成功。

mysql中,只需要一个

group_concat(Properties) as grouped 

并对该字符串执行类似操作:

grouped LIKE '%Green%' AND grouped LIKE '%Yellow%'

如何在Solr索引上实现此查询?

到目前为止尝试引用和没有:

intersect(  
    search(w3, q=Properties:("Green"), fl="ContactId", sort="ContactId asc"),  
    search(w3, q=Properties:("Yellow"), fl="ContactId", sort="ContactId asc"),  
    on="ContactId" )

派生自solr的例子:

intersect(  
    search(w3, q=Properties:("Green" OR "Green" AND "Yellow"), fl="ContactId", sort="ContactId asc"),  
    search(w3, q=Properties:("Yellow" OR "Green" AND "Yellow"), fl="ContactId", sort="ContactId asc"),  
    on="ContactId" )

但仍然只有结果出现在两个属性都位于同一文档内而不是那些属于同一个ContactId的多个文档中的每个属性的情况下(在这种情况下只有C2,但不是C1)。

答案

您可以使用Streaming Expression,并在两个查询之间获取文档contained in the intersection(即一个查询匹配Yellow,一个匹配Green):

intersect(
  search(collection, q=Properties:Yellow, fl="ContactId", sort="ContactId asc"),
  search(collection, q=Properties:Green, fl="ContactId", sort="ContactId asc"),
  on="ContactId"
)

您通过expr参数将流式表达式提供给/stream请求处理程序。您也可以在您的集合的Solr管理界面中的“Stream”下直接测试它(不使用expr=)。

除此之外,你的MySQL示例实际上不会做同样的事情,因为它包含任何文本存在于某处的元素 - 因此“暗绿色”会产生误报。

以上是关于Solr 6.6.2分组查询的主要内容,如果未能解决你的问题,请参考以下文章

Solr分组聚合查询之Facet

8.4Solr API使用(Result Grouping分组查询)

solr4.5分组查询统计功能介绍

solr-geohsah 按照距离搜索分组

solr group分组排序的问题

solr 学习片段