Как выделить искомый текст внутри документа, который индексируется в Apache Solr

#solr #lucene

Вопрос:

Я использую Apache Solr 8.6 для индексирования документов с помощью инструмента POST в Linux, как указано в справочном руководстве Apache Solr.

Команда POST Tool

 bin/post -c testcore /testdocs/
 

Документы успешно индексируются. Теперь, когда я искал строку, например: привет в пользовательском интерфейсе администратора Solr, она возвращает соответствующие документы.

Теперь я хочу выделить эту строку «привет», которая присутствует внутри документа в качестве содержимого. Но я не могу добиться того же самого. Я попытался включить подсветку и ввести text_* в hl.fl=text_*. И все же я не могу добиться результата. Однако, если эта строка поиска присутствует в любом из индексированных полей, она правильно выделяется в результатах.

В managed-schema.xml я добавил содержимое и текстовые поля, как показано ниже.

 <field name="content" type="text_general" indexed="false" stored="true" multiValued="false"/> 

<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
 

Я попытался выполнить следующие запросы:

 http://localhost:8983/solr/testcore/select?q=_text_:*hello*amp;hl=trueamp;hl.fl=contentamp;hl.usephrasehighlighter=true

http://localhost:8983/solr/testcore/select?q=_text_:*hello*amp;hl=trueamp;hl.fl=text_*amp;hl.usephrasehighlighter=true
 

Буду признателен, если вы сможете вести меня дальше.

Изменить: В соответствии с рекомендацией

Я изменил поля содержимого и текста, как показано ниже, но это тоже не работает. Это означает, что когда я ищу текстовую строку, она не выделяет искомую строку внутри документа в качестве содержимого.

 <field name="content" type="text_general" indexed="true" stored="true" multiValued="false"/> 
    
<field name="text" type="text_general" indexed="true" stored="true" multiValued="true"/>
 

Комментарии:

1. Итак, подсветка работает с hl.fl=text_* , но не с hl.fl=content (это не очень понятно) ? Как определяются эти поля (поле тип поля) ?

2. Нет, оба запроса не работают … я пробовал оба способа. Я определил содержимое и текстовые поля в управляемом schema.xml как <имя поля=тип»содержимое»=»text_general» проиндексировано=»ложь» сохранено=»истина» многоЗначно=»ложь»/> <имя поля=тип»содержимое»=»text_general» проиндексировано=»ложь» сохранено=»истина» многоЗначно=»ложь»/><имя поля=»текст» тип=»text_general» проиндексировано=»истина» сохранено=»ложь» многоЗначно=»истина»/>

3. Хорошо, пожалуйста, отредактируйте свой вопрос, чтобы он был понятен каждому (он не читается в комментариях).

4. Я обновил managed-schema.xml фрагмент поля в вопросе

5. Хорошо, вам нужно настроить и indexed="true" то, и другое, и stored="true" чтобы подсветка работала на ваших полях, вот в чем дело.

Ответ №1:

Наконец, проблема решена путем изменения поля _text _ в manage-schema.xml файл. Я изменил значение stored=»false» на stored=»true», как показано в приведенном ниже синтаксисе.

 <field name="_text_" type="text_general" indexed="true" stored="true" multiValued="false"/>
 

Затем я перезапустил solr и переиндексировал документ.

Теперь я запустил запрос, чтобы выделить текст, как показано ниже. В этом запросе я использовал hl=on amp; hl.fl=_text _, чтобы выделить комментарий.

Запрос для выделения искомой строки

 http://localhost:8983/solr/testcore/select?q=_text_:*hello*amp;hl=onamp;hl.fl=_text_