Помогите подправить поиск на сайте

SuperGadgets

Постоялец
Регистрация
26 Дек 2016
Сообщения
60
Реакции
12
Есть у меня скрипт для сортировки и поиска элементов на странице.
Поиск учитывает последовательность слов в запросе. Тоисть если у меня элемент называется Samsung Galaxy и я делаю поиск по запросу Galaxy Samsung то ничего не находит, а запрос Samsung находит элемент.
Помогите поправить скрипт что-бы он не учитывал последовательность слов.
Вот кусок кода отвечающего за поиск:
HTML:
SLS.isearch.on('keyup',function(){
            var results = [];
            var toSearch = SLS.isearch.val();
            if(toSearch=='') {
                SLS.prod = products;
            }else{
                for(var i=0; i<SLS.sproducts.length; i++) {
                    if(SLS.sproducts.name.toLowerCase().indexOf(toSearch.toLowerCase())!=-1) {
                    results.push(SLS.sproducts);
                    }
                }
                SLS.prod = results;
            }
            SLS.page=1;
            SLS.products.html('');
            SLS.sorta(SLS.isort);
        });
 
Последнее редактирование:
Имхо, надо делать поиск по каждому слову отдельно; результаты, которые вылезли по обоим словам, показывать выше как более релевантные.
Если делать отдельный поиск по комбинациям перестановок слов в запросе, по для запроса в 3+ слова будет намного затратнее по ресурсам
 
...
var k;
var toSearchArr=toSearch.split(" ");
for(var i=0; i<SLS.sproducts.length; i++) {
k=0;
for(var j=0; j<toSearchArr.length; j++)
if(SLS.sproducts.name.toLowerCase().indexOf(toSearchArr[j].toLowerCase())!=-1) k++;
if (k==j) results.push(SLS.sproducts);
}
...
 
можно по комбинациям, функцию perm нарыл на просторах еще давно, из массива [1,2] вернет:
[[1,2], [2,1]]
из ['a','b','c']:
[["a", "b", "c"], ["a", "c", "b"], ["b", "a", "c"], ["b", "c", "a"], ["c", "a", "b"], ["c", "b", "a"]]
только я чего-то не въеду. Свойство SLS.sproducts странно как-то у вас организовано.

HTML:
  function perm(xs) {
  let ret = [];

  for (let i = 0; i < xs.length; i = i + 1) {
    let rest = perm(xs.slice(0, i).concat(xs.slice(i + 1)));

    if(!rest.length) {
      ret.push([xs[i]])
    } else {
      for(let j = 0; j < rest.length; j = j + 1) {
        ret.push([xs[i]].concat(rest[j]))
      }
    }
  }
  return ret;
}

SLS.isearch.on('keyup',function(){
            var results = [];
            var toSearch = $.trim(this.value.replace(/\s+/g,' ')).toLowerCase();
            if(toSearch=='') {
                SLS.prod = products;
            }else{
                for(var i=0; i<SLS.sproducts.length; i++) {
                      var split = SLS.sproducts.name.toLowerCase().split(' ');
                      var add = !1;
                      perm(split).forEach(function(v){
                        if(v.join(' ').indexOf(toSearch)!=-1 && !add) {
                          results.push(SLS.sproducts);
                          add = !0;
                        }              
                      });
                }
                SLS.prod = results;
            }
            SLS.page=1;
            SLS.products.html('');
            SLS.sorta(SLS.isort);
        });
работает как-то так: Для просмотра ссылки Войди или Зарегистрируйся
 
Назад
Сверху