Какой наиболее производительный поиск по JSON объектам на момент 2020?

У меня есть достаточно большой файл с JSON данными (150 тысяч json-объектов - в сумме ~50 мегабайт) и мне нужно быстро проводить по ним поиск (в < 150 мс), сортируя варианты с наибольшим количеством совпадающих с N текстом символов. Всего должно выводиться 10 найденных объектов.

В JSON также есть кастомные символы (иероглифы и прочие символы).

Структура Json выглядит следующим образом:

{"item": 643, "name": "Уникальное название товара `кастомный символ здесь`", "type": "Кастомный символ"}


У каждого объекта одни и те же свойства (item, name, type...) и отличаются только их значения.

Какие производительные варианты поиска по обычным(английским/русским) и кастомным (например, китайские иероглифы) символам в JSON вы посоветуете?
  • Вопрос задан
  • 729 просмотров
Пригласить эксперта
Ответы на вопрос 6
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Классикой поиска в больших файлах является Sphinx, однако у вас не набор букв, а структурированные данные, по этому я думаю вам будет логичней создать параметризованную модель и перенести все в бд, хотя бы в SQLite (вроде у вас достаточно простая модель данных). Но тут тоже есть нюансы, ну и возможно это вам просто не подходит по ряду причин. Тогда сфинкс для вас лучший вариант, хотя 50 мб файл как-то мелковато, обычно сфинкс ставят для работы с гигабайтными файлами, но будет "на вырост".
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
чЮдесов нет

все быстрые поиски - это пресозданные индексы
явно или неявно

в вашем случае - если речь о фронте - все упирается в парсер JSON

в Питоне самый быстрый ujson, обвязка над С, в Go - тоже пару вариантов
в JS вряд ли что-то будет быстрее нативного

но вот с локальной базой, хотя бы levelDB все уже повеселее
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Указатель нужен (в книгах был, в конце).
Из него делаем "дерево": А, Б, В, ....АА, АБ, АВ,..., и с каждого потом: АБА, АББ,.... и т.д. по всем "цепочкам" букв, встречающихся в словах указателя.

При поиске - делаем спуск по "дереву" для каждого слова.
Чем больше слов поискового запроса попало на одну запись, тем она релевантнее запросу.
Это будет точно менее 150мс.
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Ну можно отсечь парсинг самого JSON, создание объектов и тд, а работать как со строкой. Составить регулярку, которая будет возвращать нужные куски строки, а потом уже переводишь их в объекты. Можешь отсортировать если хочешь. По поводу производительности ничего не могу сказать, надо проверять.
Ответ написан
hzzzzl
@hzzzzl
У меня есть достаточно большой файл с JSON ---- один единственный, или их много и они будут добавлятся?
может проще в какую нибудь базу данных всё кинуть, тем более у объектов определенная структура, будет вообще моментально и гибко всё искаться
Ответ написан
Комментировать
@mr_ko
Javascript, Node.js. React.js, Vue.js, Wordpress
Неавно решал подобную задачу, тестовое задание. Как и говорят, ребята выше, без дополнительных индексов быстро не получится. В моем случае поиск был всего по двум полям, поетому я пересоздас себе масив по этим ключам и искал, этого было достаточно. В процесе разбора наткнулся на такой вот пакет https://www.npmjs.com/package/json-index есть и аналоги, может помочь. Но лично я не пробовал.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы