Я пытаюсь реализовать алгоритм поиска в моей простой структуре данных.Однако это не вопрос «КАК ЭТО ДЕЛАТЬ?», А вопрос «как я могу оптимизировать алгоритм?»
Я пытаюсь сохранить индекс файлов, и каждый файл может бытьсвязан с любым количеством тегов (которые действуют как категории)
Так структурированы мои данные:
Записи:
------------------------------------
| id | description | short | score |
------------------------------------
Теги:
-------------
| id | text |
-------------
EntryTags:
-------------------
| entry_id | tag_id |
-------------------
В поле поиска запрос поиска всегда будет превращаться в отдельные слова, разделенные плюсом (+).
в следующем примере я буду искать "синий + веб-сайт + простой + макет"
- split searchterm up into array named t
- convert each word in array t into a number using the id from "Tags" table
- for each element in array t, select make new array for each element with "EntryTags" matching the search
- generate array A, where elements that are in all 4 arrays are put into
- generate array B, where elements that are in 3 of the 4 arrays are put into
- generate array C, where elements that are in 2 of the 4 arrays are put into
- generate array D with the last elemenets rest
- sort array A,B,C and D by the score parameter from the table
- output array A, then B, then C, then D
, конечно, это не оптимизировано или что-то еще, но у меня нет опыта работы с более сложным SQLпинает мою задницу: (
В конце концов, все это будет написано на PHP и в библиотеке mysqli (и я, конечно, буду обновлять поток по мере продвижения)