【问题标题】:Solr - subqueriesSolr - 子查询
【发布时间】:2012-05-18 09:10:28
【问题描述】:

我需要做一个 Solr 子查询,如果它在 MySQL 中会如下所示:

SELECT *
FROM solr_index
WHERE type = 'person' AND 
city IN (SELECT name FROM solr_index WHERE name = 'London' AND type = 'city')

显然 Solr 连接非常相似 - http://wiki.apache.org/solr/Join。但这些似乎只在 Solr 4 中可用。有什么方法可以在 Solr 3.X 中做到这一点?

理想的方式与 ComplexPhraseQueryParser 兼容并且 Solr PHP 客户端或 Solarium 支持。

非常感谢任何帮助。

更新:

另一个与位置无关的例子:

SELECT *
FROM solr_index
WHERE type = 'project' AND 
tag IN (SELECT name FROM solr_index WHERE name = 'Elephant' AND type = 'tag')

【问题讨论】:

  • 查看地理/空间特征而不是基于字符串的位置信息搜索可能会更好。 wiki.apache.org/solr/SpatialSearch
  • 感谢您的回复。我需要这个功能来处理一些场景——不仅仅是与位置有关。我添加了另一个示例来演示如何将其用于其他用途。
  • 人们通常会去规范化(扁平化)他们的架构,以便不必进行连接。在你的情况下不可能吗?

标签: join solr subquery


【解决方案1】:

从 solr 3.4 开始就有连接。看看这个

http://lucidworks.com/blog/lucene_3_4_0/

【讨论】:

  • @pashgolpashgolian 感谢您的指点,已修复。显然 Lucidworks 已经更新了他们的博客,但还没有设置链接重定向。
【解决方案2】:

我会尝试过滤查询和构面的不同变体。比如:

q=*:*
fq=(type:city AND name:london)
facet=true
facet.query=type:person

希望这会有所帮助,祝你好运。

【讨论】:

    【解决方案3】:

    试试这个

    q=*:*&fq=city:london&fq=type:(city OR person)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2016-07-24
      • 2017-03-22
      • 1970-01-01
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多