Может ли поиск Solr содержать подстановочный знак в ключе? - PullRequest
0 голосов
/ 08 февраля 2020

У меня есть блок json, сохраненный как один документ в solr,

{
    "internal":...
    "internet":...
    "interface":...
    "noise":...
    "noise":...
}

Можно ли выполнить поиск как " inter *: *"? Я хочу выяснить все содержимое с ключом, начинающимся с "inter"

К сожалению, я получил ошибку синтаксического анализатора, есть ли способ выполнить поиск с подстановочным знаком в ключе?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2020

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

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

Существует также малоизвестная функция, названная "Псевдоним поля с использованием переопределения для каждого поля qf" (по крайней мере, я не знал об этом). Если я проанализировал то, что мне удалось найти по нескольким запросам в Интернете, вы сможете выполнить f.i_fields.qf=internal internet interface&qf=i_fields. Фактически создается псевдоним i_fields, который ссылается на эти три поля. Вам все равно придется дать их явно.

0 голосов
/ 08 февраля 2020

Вы можете использовать Dynamic fields. Это позволяет Solr индексировать поля, которые вы не определили явно в своей схеме.

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

Поле Dynami c может быть определено как

<dynamicField name="*_i" type="int" indexed="true"  stored="true"/>

Пожалуйста, обратитесь к solr документация для больше на Полях Dynami c. Dynami c Поля

После этого создайте поле копирования. Скопируйте поля Dynami c в поле копирования.

После этого запрос можно выполнить в copyField.

<dynamicField name="inter_*" type="string" indexed="true" stored="true"/>
<field name="internal_static" type="string" indexed="true" stored="true" multiValued="true"/>
<copyField source="inter_*" dest="emp_static"/>
...