Как объединить несколько запросов в solr

Я использую solr 4.4.0 и rsolr gem для соответствующего API.

Фон

  • В моей базе данных есть несколько таксономий, таких как кольца, серьги, ожерелья и т. д.

  • У меня есть несколько коллекций в моей базе данных, например, короткие, современные и т. Д.

  • Каждая таксономия имеет ряд подкатегорий, называемых типами.

Входные данные. Я хочу написать запрос, который принимает два входных параметра: 1. Таксономия. 2. Коллекция.

Желаемый результат: у меня есть набор предопределенных правил, которые дают мне таксономию, коллекцию и тип желаемых результатов.

Рассмотрим следующее правило:

If Anklets (Chunky)
Then
Necklaces (Chunky) (Beaded)
Earrings (Chunky) (Danglers)
Pendants (Chunky) (With chain)
Bracelets (Chunky) (Beaded)

Здесь входная таксономия — anklets, а входная коллекция — chunky. И мне нужно 6 результатов, соответствующих каждому утверждению внутри условия. Итак, в моем результате должно получиться 6 ожерелий из бисера, которые находятся в большой коллекции. 6 сережек с подвесками под массивной коллекцией и так далее.....

Проблема: я могу указать q и fq и получить результаты для каждого оператора. Но мне нужно будет отправить отдельный запрос, соответствующий каждому оператору, сделав в общей сложности 4 запроса. можно ли сформировать запрос так, чтобы это можно было сделать в одном запросе?

Спасибо


person nish    schedule 01.07.2014    source источник
comment
как выглядят ваши отдельные запросы? Нельзя ли их суммировать с помощью логического оператора ИЛИ?   -  person omu_negru    schedule 01.07.2014
comment
@omu_negru: Рассмотрим первое утверждение. q => "product_taxonomy_name:Necklaces", fq => "+product_collection_value:Chunky, +product_type_value:Beaded", rows => 6   -  person nish    schedule 01.07.2014
comment
@omu_negru: Если я комбинирую их с ИЛИ, например: `fq =› (product_taxonomy_name: Ожерелья AND product_collection_value: Коренастый AND product_type_value: Beaded) ИЛИ (product_taxonomy_name: Серьги AND product_collection_value: Коренастый AND product_type_value: Danglers) ИЛИ (...) ИЛИ ( ...). Как мне убедиться, что я получу 6 результатов, соответствующих каждому утверждению??   -  person nish    schedule 01.07.2014
comment
хех.... забыл об этой части. Теперь, когда вы упомянули об этом, я не могу придумать простого способа сделать это, кроме как запросить более 100 результатов, таким образом гарантируя, что у вас будет 6+ результатов каждого, а затем сбросить те, которые имеют более низкую релевантность, чем первые 6 в каждая категория   -  person omu_negru    schedule 01.07.2014
comment
@omu_negru: Это действительно можно сделать. Проверьте ответ. Спасибо за вашу помощь, вы указали мне правильное направление - используя операторы AND и OR   -  person nish    schedule 01.07.2014


Ответы (1)


На самом деле это можно сделать с помощью функции результатов group, предоставляемой solr.

1-й шаг — объединить запросы с использованием логических операторов для генерации fq:

fq => "(product_taxonomy_name:Necklaces AND product_collection_value:Chunky AND product_type_value:Beaded) 
    OR (product_taxonomy_name:Earrings AND product_collection_value:Chunky AND product_type_value:Danglers) 
    OR (...) 
    OR (...)"

Передайте следующие дополнительные параметры в запросе:

group => true, group.field => product_taxonomy_name, group.limit => 6
person nish    schedule 01.07.2014