Я использую текстовый поиск ингредиентов для добавления ингредиентов в рецепт. В настоящее время у меня есть полнотекстовый индекс по имени ингредиента, который хранится в одном текстовом поле, например:
"Соус томатный лайт хайнц"
Я обнаружил, что, поскольку в базе данных много ингредиентов с очень похожими названиями, простая сортировка по релевантности не работает так часто. Итак, я обнаружил, что сортирую по множеству собственных эмпирических правил, которые, вероятно, дублируют большую часть алгоритма полнотекстового поиска, который выдает числовую релевантность. Например (сокращенно):
ЗАКАЗАТЬ ПО
[название ингредиента является точно поисковым термином],
[название ингредиента начинается с поискового запроса],
[имя ингредиента начинается с любого слова из поиска и содержит все поисковые термины в некотором порядке],
[имя ингредиента содержит все поисковые термины в некотором порядке],
... и так далее. Каждый из них определен в спецификации SELECT как выражение, возвращающее либо 1, либо 0, и поэтому я упорядочиваю их по порядку.
Я хотел бы услышать предложения для:
- Лучший способ определить сложные критерии упорядочения в одном месте, скажем, возможно, в представлении или хранимой процедуре, в которую можно передать только искомое условие и получить набор результатов, не беспокоясь о том, как они заказывали?
- Лучший инструмент для этого, чем полнотекстовый движок MySQL - возможно, если бы я использовал Sphinx или что-то [о чем я слышал, но раньше не использовал], я бы нашел какой-то сложный вариант конфигурации, предназначенный для решения подобных проблем
- Некоторые поисковые запросы в Google, которые могут привести к обсуждению того, как упорядочить текстовые элементы в определенном домене, как это? Я не нашел много полезного.
Спасибо за чтение!