LINUX.ORG.RU

Запил поискового движка на C++

 


1

4

Да, можно взять elasticsearch, postgres, что-то ещё. Но мы тут не про «взять», а про «запилить», development же.

Так вот, я ищу слово «дур». Хочу, чтобы находилось как в телеграме:

дурь
дурью
дури
дуру
дура

Возможно, «дурка», но вряд-ли - корень другой.

Короче чо. Понимаю, что задача вызывает эталонное бурление говн, но хочется без этого. Кратенько по делу от опытных, кто делал. И без умных слов, типа морфологический поиск, окутанных тайной.

Вот давайте по-простому на уровне объяснения алгоритма школьнику.

Что можно сделать ДЛЯ НАЧАЛА? При индексации, когда мы смотрим на документ 12345 и встречаем слово «придурью» то мы берём корень и само слово. Далее пишем в индекс 2 такие записи и казалось бы достаточно.

придурью -> 12345,position
дур -> 12345,position

Идеи, возражения, уточнения? Пасиба. Просьба воздержаться от росказней о том как это сложно, страшно, какая это величайшая задача и кто такой автор сфинкса и как он классно травит байки со сцены на хайлоаде, давайте более приземлённо и по делу покритикуем мой минималистичный алгоритм, основной жопой которого будет вопрос о том, где взять корень слова по слову - это само по себе уже страшно без ваших страданий. Стеммеры там всякие, ага.



Последнее исправление: lesopilorama (всего исправлений: 7)

Короче, постановим следующие постулаты в треде:

  • согласимся с тем, что поиск - задача окуеть какая интересная и сложная в целом, и что в пределе поиск понимает по поисковым запросам, что пользователь испытывает дипрессию и ему надо предложить билеты до Сочи, а не лекарства, которые он искал, и вообще посоветовать как улучшить жизнь и чтобы он расстался с той бабой, но мы занимаемся не этим. Поиск должен через нейроночки или vord2vec понять, что пользователь искал детские игрушки, раз он искал паровозик пластмассовый и предложить ему ещё и машинку железную.
  • для начала хочется поиск быстрый, потом уже корректный
  • поиск нужен для мессенджера типа телеграм. Каждый чатик имеет свой индекс и мы ищем в каждом индексе каждого чатика из тех, которые юзер надобавлял себе в контактлист. Именно потому, что поиск ведётся по частоменяющейся фигне и фигни много, он должен быть быстр и устойчив к росту, а его корректность на втором плане; скорость-корректность трейдофы, все дела, но скорость на первом. Не нашли «иголка» по слову «игла» - да и хер с тобой, ты неудачник значит, зато слово «пушкин» по слову «пушкин» нашли.
  • если поиск будет находить слово «продукты» по слову «продукт», то это перекроет уже 99% всех потребностей и будет зашибись настолько, что я себе выпишу премию и улечу загорать на год на море, я даже не знаю что такое морфология в этом плане
lesopilorama
() автор топика
Последнее исправление: lesopilorama (всего исправлений: 2)