Как запросить и отфильтровать дочерние документы Solr 6.4 с несколькими критериями для одного и того же дочернего документа? - PullRequest
0 голосов
/ 16 января 2019

Допустим, у меня есть следующие документы в Solr 6.4.2.

 <doc>
    <field name="id">1</field>
    <field name="solr_record_type">1</field>
    <field name="title">Fabulous Book</field>
    <field name="author">Angelo Author</field>
    <doc>
        <field name="id">1-1</field>
        <field name="solr_record_type">2</field>
        <field name="contributor_name">Polly Math</field>
        <field name="contributor_type">3</field>
    </doc>
</doc>

<doc>
    <field name="id">2</field>
    <field name="solr_record_type">1</field>
    <field name="title">Wonderful Book</field>
    <field name="author">Andrew Author</field>
    <doc>
        <field name="id">2-1</field>
        <field name="solr_record_type">2</field>
        <field name="contributor_name">Polly Math</field>
        <field name="contributor_type">4</field>
    </doc>
    <doc>
        <field name="id">2-2</field>
        <field name="solr_record_type">2</field>
        <field name="contributor_name">Carlos Composer</field>
        <field name="contributor_type">3</field>
    </doc>
</doc>

Я хочу вернуть документ, который имеет дочерний документ с Polly Math в качестве contributor_name и 3 в качестве contributor_type.contributor_name - это текстовое поле, которое я также индексирую в фонетическом поле, но contributor_type - это просто целое число.

Следующие параметры запроса возвращают обе записи и не ограничивают тип участника:

q={!parent which="solr_record_type:1" v=$q_composer_name}
q_composer_name=_query_:"{!dismax qf=\"contributor_name^2.0 contributor_name_phonetic^2.0\" pf=\"contributor_name^2.0 contributor_name_phonetic^2.0\" tie=0.05}Polly"
fl=*,[child parentFilter="solr_record_type:1"]

Как мне обновить этот запрос, чтобы я возвращал запись с id = 1, а не запись с id = 2?

1 Ответ

0 голосов
/ 17 января 2019

Если честно, я не вижу ни одного фильтра по contributor_type, который вы хотите.

Итак, я бы добавил его только к локальному параметру, который вы используете, чтобы сделать q_composer_name следующее:

q_composer_name=+_query_:"{!dismax qf=\"contributor_name^2.0 contributor_name_phonetic^2.0\" pf=\"contributor_name^2.0 contributor_name_phonetic^2.0\" tie=0.05}Polly" +contributor_type:3

Я добавил недостающий раздел +contributor_type:3, чтобы сделать это условие обязательным. Также добавлен + к запросу dismax, чтобы сделать его действительно Polly AND type 3

...