2012-05-09 4 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 или 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)