Я создаю функцию поиска своих объявлений на своем веб-сайте. Вот некоторые из критериев, которые мне необходимо выполнить:
При поиске «bmw 520» будут совпадать только те слова, в которых эти два слова входят именно в этот порядок. не соответствует только «bmw» или только «520».
При поиске результатов «bmw 330ci», как указано выше, будет возвращено, но WITH WITH WITHOUT без расширения ci. Есть несколько расширений в автомобилях, как вы все знаете (i, ci, si, fi и т. Д.).
Я хочу, чтобы знак «минус» «исключил» все возвращаемые значения, содержащие слово после знака, например: «bmw -330» вернет все результаты «bmw» без «330». (НЕ вместо знака минус тоже нормально)
все специальные акценты характера, такие как «é», преобразуются в их простые значения, в данном случае «e».
список слов, которые полностью игнорируются в строке поиска.
Мне нужен Sphinx, или я должен написать это в php-файле?
Что вы предлагаете мне делать?
благодаря
Я думаю, что Сфинкс соответствует всем вашим критериям.
Я думаю, что Sphinx довольно хорошо подходит к тому, что вы хотите сделать, но некоторые вещи не будут происходить автоматически …
Чтобы точно совпадать с двумя словами, вам нужно либо использовать режим совпадения фразы, либо группировать слова в двойных кавычках, используя режим расширенного соответствия.
Это сложный вопрос – если вы не укажете конкретные исключения, я не думаю, что вы можете индексировать 330ci как «330 ci», так и «330ci».
Пока вы используете логические или расширенные режимы совпадения, знак минус работает так, как вам хотелось бы.
Символы «Special» могут быть преобразованы в стандартный ASCII, но по умолчанию это не происходит. Вам нужно настроить значение charset_table . Это сообщение в блоге предназначено для Thinking Sphinx (плагин Ruby для Sphinx), но значение настройки просто передается прямо в Sphinx.
Вы можете игнорировать только определенные слова для каждого запроса, если у вас есть хотя бы одно другое слово в запросе (то есть: «-foo» не будет работать для Sphinx, но «foo -bar» в порядке). Стоит отметить, что вы можете не индексировать определенные слова .