Поиск вложенных документов в сложном синтаксисе parentFilter Solr - PullRequest
0 голосов
/ 31 октября 2018

Мы добавляем вложенные документы в наш индекс Solr. Для этой цели мы добавили поле solr_record_type к каждой записи, но при обновлении индекса будет интервал, в котором исходные документы будут иметь значение NULL в этом поле. Мы хотели бы рассматривать все исходные документы как корневые документы.

В нашем индексе Solr solr_record_type равен 1, а дочерние типы представлены 2-4. Итак, чтобы получить обратную совместимость с тем, что в настоящее время возвращается запросами, я добавил этот параметр fq:

-solr_record_type:[2 TO 4]

Однако у меня возникли проблемы при компоновке parentFilter в преобразователе child. Для поля fl я пробовал:

*,[child parentFilter="-solr_record_type:[2 TO 4]"]

Это не сработает, потому что затем по какой-то причине пропускает раздел _childDocuments_ в результатах. Я не знаю почему. Мне нужен какой-то способ указать, что родительский фильтр имеет значение «ноль или 1» или «что угодно, кроме 2, 3 и 4». Как я могу это сделать?

Мне не удалось найти окончательную ссылку на синтаксис для parentFilter, только очень простые примеры.

1 Ответ

0 голосов
/ 31 октября 2018

Отрицательный запрос должен начинаться с префикса, из которого он собирается удалить документы. Думайте об этом как о пересечении двух наборов, и если у вас есть только набор, который «эти документы должны быть удалены», вам нечего их удалять.

Обычный анализатор запросов (и обработчики edismax) автоматически добавляют набор всех документов, *:* перед отрицательными запросами, поэтому он работает - пока вы не начнете с более длинных AND и OR операторы, включающие отрицательные запросы, к которым вам внезапно нужно добавить префикс *:*.

То же самое относится и к синтаксису parentFilter - здесь нет встроенного набора всех документов с автоматическим префиксом, поэтому если у вас отрицательный запрос, вам придется добавить его самостоятельно.

*,[child parentFilter="*:* -solr_record_type:[2 TO 4]"]
...