Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
1

Как организовать поиск по сайту?

10.10.2016, 15:36. Просмотров 2894. Ответов 18
Метки нет (Все метки)

Для начала стоит определиться какой поиск мне лучше взять? Поиск по БД, или как то парсить весь сайт, или же взять поиск какого нибудь поисковика (слышал что так можно, но слабо представляю себе как это выглядит). В принципе мне кажется самый удобный вариант был бы - поиск по БД, тем более что мне нужен довольно простой поиск. Тематика сайта - онлайн библиотека. Надо чтобы просто можно было нужную книгу найти по названию / автору / названию серии. Может что то еще... Мне кажется реально тут самый простой вариант в БД искать будет. Только я никак не придумаю по какому алгоритму это делать...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 15:36
Ответы с готовыми решениями:

Необходимо организовать поиск по сайту
Задача: необходимо организовать поиск по сайту. Все страницы ASP динамические с информацией из базы...

Как работает поиск по сайту?
Подскажите как работает поиск по сайту, т.е. как найти тот или иной раздел, и вообще возможно ли...

Сделала поиск по сайту, как добавить AJAX ?
Доброго дня, осваиваю ASP.Net сделала простой поиск по сайту (по учебнику smile ) Как мне...

Как лучше всего оранизовать поиск по ASP сайту?
Как лучше всего оранизовать поиск по ASP сайту, если данные в основном берутся из баз данных...

Как можно организовать поиск по серверу?
Как можно организовать поиск по серверу, учитывая что индексироваться должны как и статитческие...

18
SashaPl
49 / 36 / 9
Регистрация: 25.06.2014
Сообщений: 406
Завершенные тесты: 3
10.10.2016, 16:07 2
А какие алгоритмы поиска бывают у EF? Обычный же запрос с like.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
10.10.2016, 16:23  [ТС] 3
SashaPl, нет, ну не до такой же степени просто. Должно быть поисковое поле как на любом другом сайте. Куда можно забить в любой порядке и автора и название и все остальное. Соответственное алгоритм же не знает какое слово к какому полю в БД относится...
0
SashaPl
49 / 36 / 9
Регистрация: 25.06.2014
Сообщений: 406
Завершенные тесты: 3
10.10.2016, 17:30 4
Dark Byte, например как где?
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
10.10.2016, 20:19  [ТС] 5
SashaPl, эмм, ни разу не видел поиск на сайтах? Да хоть этот форум возьми. Ну если онлайн библиотеку, то я например ориентируюсь примерное на такую.
0
SashaPl
49 / 36 / 9
Регистрация: 25.06.2014
Сообщений: 406
Завершенные тесты: 3
10.10.2016, 21:37 6
Я не понял что ты хочешь. Ты вообще читал что-нибудь про asp.net mvc?
Зпрос в контроле будет что-то типо:
C#
1
var searchResult = db.Books.Contains("Книга");
В представление передаешь список моделей и выводишь их. Если поиск идет не только по книгам, но еще и по авторам, то делаешь аналогичный запрос к авторам, создаешь вьюМодел, которую будешь передавать в представление.
0
lvlkoo
10.10.2016, 22:16
  #7

Не по теме:

SashaPl, у вас в бд есть стринговые сущности? :D

0
SashaPl
49 / 36 / 9
Регистрация: 25.06.2014
Сообщений: 406
Завершенные тесты: 3
10.10.2016, 22:19 8
lvlkoo, только сейчас понял, что забыл написать вызов свойства
C#
1
var searchResult = db.Books.Name.Contains("Книга");
0
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
578 / 491 / 223
Регистрация: 16.10.2010
Сообщений: 1,898
Завершенные тесты: 2
10.10.2016, 22:35 9

Не по теме:

SashaPl, еще лучше, а как вы из DbSet<T> Books вызываете свойство Name?)) не помню такого :D



Добавлено через 4 минуты
Ну а по теме, что то вроде этого.

C#
1
2
3
4
5
6
public ActionResult DoSearch(string author, string category)
{
    var result = db.Books.Where(book => book.Author.Contains(author) && book.Category.Contains(category));
    var model = ... ///generate some viewmodel
    return View(model);
}
0
evkaky
4 / 4 / 2
Регистрация: 07.07.2016
Сообщений: 23
10.10.2016, 23:07 10
Поиск по БД, или как то парсить весь сайт, или же взять поиск какого нибудь поисковика
Сайт парсить не надо!
Поиск поисковика (сильно сказал!) - нормальный вариант, но это если посещаемость сайта маленькая или он вообще никому не нужен.

Остается поиск по бд. Но
Поиск по бд через Contains - самый убогий вариант:
1) если окончание искомого слова немного отличается от того, что лежит в базе - ничего не найдено, хотя по факту оно есть в бд
2) Contains будет генерировать LIKE '%название чтива%' - индексы на таких запросах не работают
Но опять таки, если бд маленькая или твой сайт нафиг никому не нужен - это отличный вариант.

В противном случае гугли, так называемый, full text search. У sql server и postgres есть встроенная поддержка такого поиска. Понятия не имею, на сколько хорошо оно у них работает и поддерживается ли там русская морфология.

Если не подходит/не поддерживается, гугли elasticsearch или sphinxsearch.
1
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
11.10.2016, 08:16  [ТС] 11
SashaPl, lvlkoo, Да вы че тупите то? Я вам русским языком повторяю НИГДЕ НЕ УКАЗЫВАЕТСЯ КАКОЕ СЛОВО В СТРОКЕ АВТОР А КАКОЕ НАЗВАНИЕ! А может юзер вообще туда вобьет абракадабру. Это просто строка. В ней может быть одно слово. А может быть 10. И программа не знает какое из них автор, а какое название или еще что... Не надо меня учить делать запросы и работать с asp.net. Я это и без вас умею. Вопрос лишь в алгоритме действий.

Добавлено через 5 минут
Например входная строка поиска: "Пушкин А.С. Евгений Онегин". Соответственно алгоритм должен разобрать эту строку на слова. Потом каким то образом найти нужную книгу... А может быть запрос будет только "Пушкин А.С.". Тогда он должен найти все книги автора. А может в другом порядке "Евгений Онегин А.С. Пушкин". И опять таки это должно работать. Точно также как в поисковике ты же не задумываешься в каком порядке слова вбивать. Он все равно найдет все что возможно.

П.С. А ведь еще и падеж может меняться... Например "Евгений Онегин Пушкина Александра Сергеевича"
0
Usaga
Эксперт .NET
6776 / 4732 / 820
Регистрация: 21.01.2016
Сообщений: 18,267
Завершенные тесты: 2
11.10.2016, 08:24 12
Цитата Сообщение от Dark Byte Посмотреть сообщение
НИГДЕ НЕ УКАЗЫВАЕТСЯ КАКОЕ СЛОВО В СТРОКЕ АВТОР А КАКОЕ НАЗВАНИЕ!
Ну так ищи и по полю "Автор" и по полю "Название". В чём проблема-то?

Добавлено через 2 минуты
Цитата Сообщение от Dark Byte Посмотреть сообщение
А ведь еще и падеж может меняться...
А вот это сложнее. Тут уже не строгий поиск нужен, а некий вариант расчёта расстояния Левенштейна или что-то подобное.

Если это только учебный проект, то рекомендую ограничиться только простыми алгоритмами.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
11.10.2016, 08:36  [ТС] 13
Цитата Сообщение от Usaga Посмотреть сообщение
Ну так ищи и по полю "Автор" и по полю "Название". В чём проблема-то?
Т.е. у меня есть несколько слов (разбитый на слова поисковой запрос) и мне надо искать по нескольким полям в БД сразу. В чем проблема? Да даже не знаю. Может в том что хрен его знает как реализовать такой алгоритм поиска? Слишком запутано выходит... А уж с падежами тем более. Нет кстати не знаю там о чем ты там щас сказал, но я слышал что все куда проще. Там вроде надо просто по словарю взять и все слова привести к именительному падежу.
0
Usaga
Эксперт .NET
6776 / 4732 / 820
Регистрация: 21.01.2016
Сообщений: 18,267
Завершенные тесты: 2
11.10.2016, 08:40 14
Цитата Сообщение от Dark Byte Посмотреть сообщение
Слишком запутано выходит...
Грубо говоря так:

SQL
1
2
SELECT * FROM dbo.Book AS BK WHERE (BK.Author LIKE '%WORD1%') OR (BK.Author LIKE '%WORD2%') OR (BK.Author LIKE '%WORD3%')  ... 
(и так сколько ключевых слов) .. OR (BK.Name LIKE '%WORD1%') OR (BK.Name LIKE '%WORD2%') OR (BK.Name LIKE '%WORD3%')
0
SashaPl
49 / 36 / 9
Регистрация: 25.06.2014
Сообщений: 406
Завершенные тесты: 3
11.10.2016, 08:41 15
lvlkoo, что-то вообще жесть какая-то. Под вечер без подсказок VS раздуплиться так и не смог.
0
Usaga
Эксперт .NET
6776 / 4732 / 820
Регистрация: 21.01.2016
Сообщений: 18,267
Завершенные тесты: 2
11.10.2016, 08:51 16
Я бы повыкидывал все слова короче двух или трёх букв и искал бы по подстроке. Всё. А пока оно хоть как-то работает, можно было бы и поломать голову над более продвинутым алгоритмом. Но это, если практика покажется необходимость в этом...

Добавлено через 4 минуты
А если произвести полнотекстовую индексацию, то можно будет сделать так:

SQL
1
SELECT * FROM dbo.Book AS BK WHERE CONTAINS(BK.Author, '"bla*" OR "foo*" OR "batz*"')
Добавлено через 3 минуты
Короче, если не пытаться строить наполеоновские планы по созданию своего мини-гугла, то можно поиск сделать очень быстро и без заморочек
1
evkaky
4 / 4 / 2
Регистрация: 07.07.2016
Сообщений: 23
11.10.2016, 10:30 17
некий вариант расчёта расстояния Левенштейна или что-то подобное
BK.Author LIKE '%WORD1%') OR (BK.Author LIKE '%WORD2%') OR (BK.Author LIKE '%WORD3%')
если не пытаться строить наполеоновские планы по созданию своего мини-гугла, то можно поиск сделать очень быстро и без заморочек
Бред полнейший. Вы че?
Алгоритмы для такого поиска на коленке за пару дней не пишутся.
Своя реализация расстояния Левенштейна для этого не пишется.
На like это не делают.
Никаких наполеоновских планов тут нету, существует over 9000 сайтов, умеющих самостоятельно искать с учетом падежей, перестановок слов, опечаток и прочего.
0
Usaga
Эксперт .NET
6776 / 4732 / 820
Регистрация: 21.01.2016
Сообщений: 18,267
Завершенные тесты: 2
11.10.2016, 10:39 18
evkaky, ну как бы это самое простейшее решение, что можно сделать "здесь и сейчас".
0
lvlkoo
11.10.2016, 13:30     Как организовать поиск по сайту?
  #19

Не по теме:

Цитата Сообщение от Dark Byte Посмотреть сообщение
Да вы че тупите то?
Может с выражениями поаккуратнее? Вам тут пытаются помочь на добровольной основе. Если вы такой ученый - флаг в руки, гугл в помощь и пожалуйста разбирайтесь сами в своем вопросе, а то на форуме "тупят"

0
11.10.2016, 13:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2016, 13:30
Привет! Вот еще темы с ответами:

Как организовать поиск по полям из разных таблиц?
Есть база Access, в ней несколько таблиц объединенных полем ID (уникальный номер) Вопрос в том,...

Поиск по сайту
Реализовываю поиск по всему сайту, ищу по контенту, по заголовком и т.д. У кого какие идеи есть по...

Умный поиск по сайту
Здравствуйте, у меня такая проблема: сайт работает с большим количеством книг, и мне нужно сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.