Перейти к содержимому


Фотография
- - - - -

Как не учитывать окончания слов в фильтре JBZoo (хак)

фильтр поиск морфология окончания слов

Сообщений в теме: 6

#1 SmetDenis

SmetDenis

Отправлено 14 September 2014 - 22:30

*
Популярное сообщение!

Хак, представленный ниже, появился после обсуждения следующего топика.
Он позволяет отсекать окончания слов и удалять стоп-слова перед запросом в базу данных.
 
В качестве старта использовал задумку http://ruseller.com/...?rub=37&id=1264
Как и в большинстве уроков на ruseller - там туча мелких ошибок. Что нашел - исправил.


Важно!

  • Список возможных окончаний перечислен в _dropBackWords()
  • Стоп-слова - это список "бессмысленных" частиц, который не нужно учитывать во время поиска. Примеры перечислены в _stopWords()
  • Слова короче 3-х символов будут исключены

n49_200x0.png
 


Таким образом, если искать фразу


все красные шторы

то по факту в запросе будут участвовать слова

красн штор

Внимание! Работает только в полнотекстовом режиме поиска.
Я проверял на JBZoo 2.1.5 После установки, внимательно проверяйте фильтры, связанные элементы и модуль материалов.

Установка
Заменить этот файл
media\zoo\applications\jbuniversal\framework\models\jbmodel.php

Прикрепленные файлы

  • Прикрепленный файл  jbmodel.php   13.19К   135 Количество загрузок:

Сообщение отредактировал SmetDenis: 17 September 2014 - 06:42
Перезалил файл с фиксом для коротких слов

  • 5
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#2 black_paw

black_paw

Отправлено 15 September 2014 - 09:53

что-то у меня, если слово менее 3 символов задано в поиске выдает вот такое

1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') )' at line 3 SQL=SELECT item_id FROM 43hg85_zoo_jbzoo_index_1job AS tIndex WHERE ((tIndex.e_cb01156f4cc3471bb3ea3e7892d6b861_s LIKE ) )

и в не все, но многие материалы материалы отдают такое же, только по богаче

Spoiler


  • 0

#3 SmetDenis

SmetDenis

Отправлено 15 September 2014 - 10:44

хм, у меня такие слова просто не учитывались.
А какой тип элемента и какая фраза была?
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#4 black_paw

black_paw

Отправлено 15 September 2014 - 10:49

элемент textarea, шаблон в фильтре: текстовое поле, в модуле: полнотекстовый поиск

фраза любая короче 3-х символов, напр. 'Бу' ))

А в full похоже вылетает из-за релевантных


  • 0

#5 SmetDenis

SmetDenis

Отправлено 15 September 2014 - 11:08

Спасибо, понял. Сегодня посмотрю.
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#6 SmetDenis

SmetDenis

Отправлено 17 September 2014 - 06:42

Перезалил файл.


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 SmetDenis

SmetDenis

Отправлено 17 September 2014 - 06:47

Для тех, кому не нужно учитывать длину слов замените этот код в файле

zrh_200x0.png

 

на

            if (JString::strlen($word) < 3) {
                $keywords[] = $word;
            } else {
                $keywords[] = $this->_dropBackWords($word);
            }

  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.






Темы с аналогичным тегами фильтр, поиск, морфология, окончания слов

Click to return to top of page in style!