Конференция "Базы" » Как лучше искать по текстовому полю? [D7, MSSQL]
 
  • ocean (15.04.09 12:49) [0]
    Я хочу часто проводить поиск по полю varchar(2500) на вхождению подстроки в любом месте, соответственно нужно максимально ускорить этот поиск. Проиндексировать поле MS SQL не дал, мол максимум 900 символов. Что можно предпринять? Как лучше искать, Locate или SQL select?
  • Sergey13 © (15.04.09 13:03) [1]
    > [0] ocean   (15.04.09 12:49)
    > Как лучше искать, Locate или SQL select?

    Сделай и сравни. Делов то на 10 минут.
  • Кщд (15.04.09 13:07) [2]
    >ocean   (15.04.09 12:49)  
    в случае с произвольной подстрокой индекс бы ничего не дал в плане производительности)
  • Sergey13 © (15.04.09 13:14) [3]
    > [0] ocean   (15.04.09 12:49)

    А что в этом поле? Как много азписей в таблице? Как часто надо искать?
    Возможно неплохим решением будет создать подчиненную таблицу ключевых слов текста для поиска.
  • ocean (15.04.09 13:51) [4]
    В поле плоский текст. Не знаю как оценить частоту, допустим раз в неск. секунд. С ключевыми словами интересная мысль, но тогда надо придумать, как их вычленять?
  • Ega23 © (15.04.09 13:53) [5]
    Можно попробовать FullTextSearch подключить. Но не факт, что это офигенную скорость даст.
  • sniknik © (15.04.09 13:55) [6]
    > Возможно неплохим решением будет создать подчиненную таблицу ключевых слов текста для поиска.
    в mssql это уже есть, называется полнотекстовый поиск. нужно просто включить, и пользоваться.
  • Ega23 © (15.04.09 14:08) [7]

    > в mssql это уже есть, называется полнотекстовый поиск. нужно
    > просто включить, и пользоваться.


    Тяжелый он очень в MSSQL. К сожалению. И я не нашёл, как его настраивать тонко можно (игрался с MSSQL 2000).
  • ocean (15.04.09 14:40) [8]
    Прочитал про полнотекстовый поиск, выглядит как то что нужно, но:
    "к сожалению в SQL Server изначально не реализована возможность полнотекстового поиска на русском, украинском языках." Это все Кондолиза устроила. Не понял, как включить таблицу в полнотекстовый поиск не из среды MSSQL, а программно. Сейчас погоняю.
  • Anatoly Podgoretsky © (15.04.09 15:23) [9]
    > ocean  (15.04.2009 12:49:00)  [0]

    К поиску тут относится только Locate
  • Anatoly Podgoretsky © (15.04.09 15:30) [10]
    Индексы или полнотекстовый поиск для подстроки, придется строить по всем вариантам поиска!
    вариант
    ариант
    риант
    иант
    ант


    и это только по одному слову, а не по совокупности слов строки.
  • Anatoly Podgoretsky © (15.04.09 15:43) [11]

    > К поиску тут относится только Locate

    Но и его нельзя применить для поиска подстроки.
    Надо отказаться от поиска и заменить выборкой с отбором по подстроке. Медленно, но что делать.
  • stas © (15.04.09 17:09) [12]
    ocean   (15.04.09 14:40) [8]
    MSSQL 2005 юзай.
  • clickmaker © (15.04.09 17:55) [13]
    > к сожалению в SQL Server изначально не реализована возможность
    > полнотекстового поиска на русском

    реализована (начиная с 2005 точно), но не включена по умолчанию
  • ANB (16.04.09 12:11) [14]
    А как в оракле такую фичу подключить ?
    Я задрался уже запросы распараллеливать ради такой ерунды.
    И писать разбивку по словам для нашей базы - очень неоптимально - места уже впритык на сервере.
  • sniknik © (16.04.09 13:03) [15]
    > такую фичу подключить ?
    > места уже впритык на сервере.
    а как ты думаешь эта фича реализована? где она будет хранить разбивку/индексы?
  • Кщд (16.04.09 13:08) [16]
    >ANB   (16.04.09 12:11) [14]
    >А как в оракле такую фичу подключить ?
    interMedia
  • Кщд (16.04.09 13:11) [17]
    >Кщд   (16.04.09 13:08) [16]
    если информация структурирована, то нам, например, отлично помог ctx-индекс для поиска по достаточно большому хранилищу XML-документов
  • ANB (16.04.09 17:44) [18]

    > если информация структурирована

    Если бы. Это имя клиента, вбитое как попало.
 
Конференция "Базы" » Как лучше искать по текстовому полю? [D7, MSSQL]
Есть новые Нет новых   [134477   +39][b:0][p:0.001]