Solr - как выделить определенные термины в определенных полях

Как я могу выделить конкретный термин в определенном поле?

Например, представьте себе следующий запрос:

foo TITLE("bar")

Я хочу добиться выделения foo во всех полях и bar только в поле TITLE.

До сих пор не работало:

q=<TITLE_field_internal_name>:"bar"hl.fl=&&hl.requireFieldMatch=true

Примечание. В приведенном выше примере TITLE правильно повторно отображается в поле solr.

1
0
505
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Большинство параметров выделения поддерживают синтаксис параметра для каждого поля:

f.TITLE.hl.<parameter>

Поскольку ваш синтаксис недействителен синтаксисом Solr и он никак не узнает, что TITLE("bar") относится к полю с именем TITLE, вам придется извлечь эти (или предоставить) эти метаданные самостоятельно.

Если вы запрашиваете разные поля и хотите выделить только термины, попавшие в эти поля (например, если ваш запрос был title:bar для поиска только bar в поле title), вам не нужно использовать настройки для каждого поля, но вы можете вместо этого установите hl.requireFieldMatch на true.

By default, false, all query terms will be highlighted for each field to be highlighted (hl.fl) no matter what fields the parsed query refer to. If set to true, only query terms aligning with the field being highlighted will in turn be highlighted.

Note: if the query references fields different from the field being highlighted and they have different text analysis, the query may not highlight query terms it should have and vice versa. The analysis used is that of the field being highlighted (hl.fl), not the query fields.

В приведенном выше примере я могу программно сопоставить TITLE, чтобы узнать поле solr.

Joel Mata 26.10.2018 12:21

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

MatsLindh 26.10.2018 12:32

Но «вам не нужно использовать настройки для отдельных полей, но вместо этого можно установить hl.requireFieldMatch в значение true». недостаточно, так как я хочу выделить только foo в поле title и bar в, скажем, поле description . Но в то же время я не хочу выделять bar в заголовке, содержащем foo bar, где у меня есть запрос TITLE(foo) bar.

Joel Mata 29.10.2018 16:03

"или задайте специальный параметр для каждого типа поля, для которого нужно выделить поле". не могли бы вы привести пример такого синтаксиса?

Joel Mata 29.10.2018 16:23

Наконец, после долгих проб и ошибок мне удалось заставить эту штуку работать. Вот несколько фрагментов:

fq=(_query_:"{!edismax+qf%3D'container_title_en'+v%3D'hormones'}"+OR+_query_:"{!edismax+qf%3D$fqf+v%3D'cancer'}")

fqf=authors_tnss+etc+etc+...

hl.q=(_query_:"{!edismax+qf%3D'container_title_en'+v%3D'hormones'}"+OR+_query_:"{!edismax+qf%3D$fqf+v%3D'cancer'}")

hl.fl=id,external_id_s,etc,etc,...

hl.requireFieldMatch=true

обратите внимание, что если поля hl.fl разделены ,, а в моем настраиваемом поле fqf в fq они разделены +.

Другие вопросы по теме