Как использовать результат подзапроса в качестве входных данных для другого запроса в Solr?

Скажем, у меня есть индекс со следующими полями:

ID, Фамилия, Страна, Возраст

Каким будет синтаксис запроса Solr для достижения чего-то, что в SQL можно было бы выразить как:

SELECT * 
FROM table
WHERE country = (SELECT country FROM table WHERE id = 123);

Уловка - я бы хотел, чтобы это был всего один запрос, а не два отдельных.


person Alex    schedule 23.11.2015    source источник


Ответы (2)


Вам придется немного изменить структуру данных. Это не SQL, и у него нет отношений, поэтому вам придется сопоставлять их вручную.

Документ:

{
    "Id": 1,
    "Surname": "myname",
    "CountryId": 1,
    "Age": 49
}

Запрос:

http://my.solr/solr/table/select:

{
    "q": "*:*",
    "fq": "CountryId: 49",
    "fl": "*"
}
person KiraLT    schedule 23.11.2015

Если вы не хотите денормализировать данные, попробуйте Присоединиться или Блокировать. Один из примеров Join:

{
    "q":"{!join fromIndex=country from=id to=country}*:*"
}

Но это будет очень медленно, когда у вас есть большое количество данных, например, миллионы записей для каждого ядра.

person Zhitao Yue    schedule 24.11.2015