Одним из способов решения проблемы, которая включает в себя слово «any», часто является использование jq's any
, например, с использованием переменной оболочки:
jq --argjson filter "$filter" '
map((.title | split(" ")) as $title
| select(any( $title[] as $t
| $filter[] as $kw
| $kw == $t )))' input.json
Отрицание
Как в формальномЛогика, вы можете использовать all
или any
(в сочетании с отрицанием), чтобы решить отрицательную проблему.Но не забывайте, что если вы используете not
, jq's not
является фильтром нулевой арности.
jq --argjson filter "$filter" '
map((.title | split(" ")) as $title
| select(all( $title[] as $t
| $filter[] as $kw
| $kw != $t )))' input.json
Другие подходы
Вышеприведенное использование "соответствия ключевых слов" какэто то, что задает вопрос, но, конечно, вышеприведенные выражения jq можно легко изменить, используя регулярные выражения или какой-либо другой тип сопоставления.
Если список ключевых слов очень длинный, то лучший алгоритм пересечения массивов, несомненно, был бы желателен.