【问题标题】:Grouping with Filter Query Solr使用过滤器查询 Solr 进行分组
【发布时间】:2018-12-19 15:54:58
【问题描述】:

如下所述,我在 solr 中有文档

文档 1

{ "event_name":"查看的产品", "event_property":["category","product_name","product_code","price","brand","color","discount","is_new_visitor"], "event_value":["category-sunglasses","product_name-david blake 灰色太阳镜","product_code-lcsgdb364x1880gryx""price-590","brand-david blake","color-grey","discount-70"] , "session_id":"mf1545212054754888840", "company_id":"31", “创建”:1545212153, "电子邮件":"zzzz@gmail.com", “名称”:“zzzz” }

文档 2

{ "event_name":"加入购物车", "event_property":["category","product_name","product_code","price","brand","color","discount","is_new_visitor"], "event_value":["category-sunglasses","product_name-david blake 灰色太阳镜","product_code-lcsgdb364x1880gryx""price-590","brand-david blake","color-grey","discount-70"] , "session_id":"mf1545212054754888840", "company_id":"31", “创建”:1545212153, "电子邮件":"zzzz@gmail.com", “名称”:“zzzzz” }

文档 3

{ "event_name":"查看的产品", "event_property":["category","product_name","product_code","price","brand","color","discount","is_new_visitor"], "event_value":["category-sunglasses","product_name-david blake 灰色太阳镜","product_code-lcsgdb364x1880gryx""price-590","brand-david blake","color-grey","discount-70"] , "session_id":"mf1545212054754888841", "company_id":"31", “创建”:1545212153, "电子邮件":"yyyy@gmail.com", “名称”:“xxxxxx” } 文档中有用户在事件键中执行的电子邮件和活动。现在我需要请求对电子邮件进行分组以使用过滤器查询查找唯一的电子邮件。我使用了下面提到的查询

http://solr-url/solr/solr-core/select?q=*:*&fq=((event_name:"product+viewed"
+AND+event_property:"product_name"+AND+event_value:"category-sunglasses")+AND+(event_name:"add+to+cart"+AND+event_property:"product_name"+AND+event_value:"category-sunglasses"))&group.limit=1&group.ngroups=true&group=true&group.field=email

作为回应,我没有收到电子邮件,例如执行了“产品查看”和“添加到购物车”等事件的用户。

【问题讨论】:

  • 您的查询正在尝试检索具有event_nameproduct viewedadd to cart 的所有文档。从您的示例文档中,该文档在此字段中只有一个值,因此没有文档与您的查询匹配(即,没有文档将同时满足 AND 之前和之后的部分。您是否试图找出那些唯一的电子邮件谁查看了产品然后将其添加到购物车?
  • 是的,我正在尝试查找既查看了产品又将其添加到购物车的人的独特电子邮件,您能否建议一种方法。
  • Streaming Expressions API 旨在解决此类分析问题,其中您的查询试图跨多个文档关联数据。在这种情况下,您可能会创建两个查询并在它们之间进行连接。如果您需要更多帮助,请尝试并在您的帖子中添加几个示例文档
  • 还有其他方法可以实现吗?
  • 我已经修改了原帖添加了3个文档以使问题更清楚。现在搜索可以分类在第1点,2点1。我需要找到所有执行过event_name“产品的电子邮件已查看”和 event_name “添加到购物车” 2. 我需要找到所有已执行 event_name “已查看产品”且未执行“添加到购物车”的电子邮件,我还需要对电子邮件进行分组,因为 solr 中的每个文档都有电子邮件。跨度>

标签: solr


【解决方案1】:

只需检查您的查询,过滤查询应该是 AND,应该是 OR。

fq=((event_name:"product+viewed" +AND+event_property:"product_name"+AND+event_value:"category-sunglasses")+OR+(event_name:"add+to+cart"+AND+event_property:"product_name"+AND+ event_value:"category-sunglasses"))

【讨论】:

  • 我需要选择执行“产品查看”和“添加到购物车”这两个事件的用户电子邮件。如果我将使用或比我不会得到预期的结果
  • 我不是很清楚你的要求,但你可以考虑加入查询:q={!join from=email to=email}*:*
  • 我已经修改了原帖添加了3个文档以使问题更清楚。现在搜索可以分类在第1点,2点1。我需要找到所有执行过event_name“产品的电子邮件已查看”和 event_name “添加到购物车” 2. 我需要找到所有已执行 event_name “已查看产品”且未执行“添加到购物车”的电子邮件,我还需要对电子邮件进行分组,因为 solr 中的每个文档都有电子邮件。跨度>
  • 试试这个q={!join from=email to=email}event_name:"product+viewed"*&fq=event_name:"add+to+cart"。看看是否有效。
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多