【问题标题】:Solr: Newly Observed facetsSolr:新观察到的方面
【发布时间】:2015-01-21 14:52:01
【问题描述】:

我的 solr 索引数据中有两个字段:“userName”和“startTimeISO”以及许多其他字段。 现在我想查询今天看到但在过去 30 天内未看到的所有“用户名”。 基本上,我试图找出今天新观察到的用户名。

现在我正在运行的 Solr Facet 查询是:

facet.pivot: "userName,startTimeISO",
fq: " NOT startTimeISO:["2014-12-20T00:00:00.000Z" TO "2015-01-18T00:00:00.000Z"] AND startTimeISO:["2015-01-19T00:00:00.000Z" TO "2015-01-20T00:00:00.000Z"]"

但由于某种原因,我得到了不正确的结果。 例如,我在上面的查询中看到了 userName: "bla"。 如果我明天运行相同的查询,我会再次在我的 Facet 结果中看到“bla”。

我有些无法获得正确的逻辑。也许我没有使用我不知道的 solr 提供的所有工具?

有人可以在这里帮助我吗?我不介意测试您的所有建议并反复提出不同的建议。

与此同时,我正在网上寻找是否有其他方法可以解决问题。

更新: 解决方案:

如果您的数据如下所示:

"id": "1",
"userName": "one",
"startTimeISO": "2015-01-20T17:24:32.888Z"

"id": "2",
"userName": "one",
"startTimeISO": "2015-01-16T17:24:50.208Z"

"id": "3",
"userName": "two",
"startTimeISO": "2015-01-20T17:25:06.109Z"

您可以使用以下查询组合:

q=*:*
fq=startTimeISO:[NOW-1DAY TO NOW]  //this will give you all the users that
were seen today
fq=-_query_:"{!join from=userName to=userName}startTimeISO:[NOW-30DAYS TO
NOW-1DAYS]"  //dont include those documents that have others with the same
name and were viewed during the last 30 days.

感谢 Alvaro Cabrerizo 帮助我。 这是 Solr 邮件列表上相同问题的链接: http://lucene.472066.n3.nabble.com/Newly-observed-Facets-td4180538.html

【问题讨论】:

  • 不错的解决方案!值得指出的是,这适用于单分片集合,但不适用于多个。
  • 什么意思?我们有一个包含 5 个分片的 solr 集群。当我运行查询时它对我有用。
  • 它似乎可以工作,但“加入”查询仅在本地分片/索引上运行;它不是分布式的。因此,您可能会看到返回的用户名没有被过滤掉,因为认为它在 30 天内唯一的分片不知道另一个分片在 30 天窗口中有用户。如果您按用户分片,则应该没问题,因为这会将用户的数据保留在分片的本地。仅供参考 -query:"..." 语法很旧;从 v4.1(或者可能是 4.2?)开始,您可以删除它并输入“NOT”。此外,您可能希望将 'fq' 合二为一,但不是必需的。

标签: solr faceted-search


【解决方案1】:

没有一个查询可以满足您的需求。您最好的选择是首先查询今天看到的用户名(比过去 30 年中的所有用户名都要小),然后将该列表返回给您的客户。最后一天的典型“fq”查询将选择那些文档,然后 facet.field=username 与 facet.limit=1000000 不幸的是高和 facet.mincount=1。既然您的客户端上有此列表,请向 Solr 提交一个大型查询以再次对用户名字段进行分面,并在接下来的 29 天(不包括今天)进行过滤查询,并添加一个额外的过滤查询以仅匹配您在第一个查询中找到的用户名。理想情况下,用户名过滤器将使用 Solr 4.10 中的“术语”QParser,但这不是必需的。当第二个查询返回时,这将显示您今天看到的哪些用户名在随后的 29 天内也看到了。有了这些信息,您就可以减去名称集,就可以得到今天看到的用户名。

【讨论】:

  • 是的。那将不是最佳的。查询可能返回数百万个方面。我正在用我的答案更新问题。希望对你有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多