2012-05-09 92 views
4

我需要做一個Solr的子查詢,這如果是在MySQL看起來像這樣:Solr的 - 子查詢

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 Client或Solarium支持。

任何幫助,非常感謝。

UPDATE:

另一個例子是不相關的位置:

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

可能會更好過尋找到地理/空間特徵,而不是位置信息基於字符串搜索。 http://wiki.apache.org/solr/SpatialSearch –

+0

感謝您的答覆。我需要這種功能的幾個場景 - 不僅與位置有關。我已經添加了另一個示例來演示如何將它用於其他內容。 – noel

+1

人們通常會非規範化(扁平化)他們的模式以便不必進行連接。你的情況不可能嗎? – jpountz

回答

2

自從solr 3.4以後,就會出現連接。檢查了這一點

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

+0

鏈接被破壞! –

+0

@pashgolpashgolian感謝您指點,修正。顯然,Lucidworks已經更新了他們的博客,但還沒有設置鏈接重定向。 –

1

我會嘗試過濾查詢和方面的不同變種。例如:

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

希望這會有所幫助,祝您好運。

0

試試這個

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