Блог Яндекса для вебмастеров

Яндекс.Сервер – новая версия

20 марта 2009, 18:50

Мы выпустили новую версию Яндекс.Сервера -- приложения для полнотекстового поиска в корпоративных сетях и по сайтам. В ней используются ключевые технологии большого поиска Яндекса.

Что интересного?

Размер русского словаря вырос c 97 тысяч до 210 тысяч основ слов (слова "ветряной" и "ветреный" - разные, а основа одна). А для слов, отсутствующих в словаре, мы серьезно повысили точность поискового алгоритма за счет использования статистики встречаемости отдельных форм слов в интернете.  Кроме того, слова, про которые "молчат" словари, теперь можно описать в специальном файле.

В новой версии Яндекс.Сервера распознаются и находятся сочетания слов с небуквенными суффиксами: С++, C#, а также Европа+ во всех падежах. При поиске предпочтение отдается словам в заданной пользователем словарной форме.

У нас появились инсталляторы для поддерживаемых операционных систем: Windows, Linux, FreeBSD, а также дополнительные инструменты конфигурирования Яндекс.Сервера, упрощающие, например, индексацию поддоменов сайта.

Скачивайте и находите всё!


Богдан Гаркушин и команда Яндекс.Сервера

53 комментария
Подписаться на комментарии к посту
Выражаем благодарность тебе, о великий Богдан Гаркушин за вести добрые и дары щедрые!
Комментарий удалён
Да снизойдёт на тебя кара небесная, еретик!
Ага, вот прямо идет-идет да и как и снизойдет! :) Да так что и вам и не снилось.
Тимур Латыпов
21 марта 2009, 09:42
линух енто хорошо, но когда другие приложения будут по линух????
Ну что можно сказать - молодцы. Морфология - это всегда хорошо, а такой рост словаря позволит быстрее отыскивать необходимую информацию без всякого постороннего мусора. Пошёл ковырять.
Ответьте влияет ли количество ошибок с webmaster'a на индексацию? кол-во страниц с индекса упало до 20... бред. Яндекс последнее время тупит?....
Спасибо за Сервер. Подскажите где можно по задавать вопросы относительно настройки этого чуда, потому как со стандартными это что то с чем то, тонна одинаковых страниц в индексе и в выдаче.
В документации есть ответ. Скачать можно тут: http://server.yandex.ru/
Да, я ожидал такого ответа. Документацию перечитываю уже в третий раз и в общем то не в пустую. Всё время нахожу что то новое :) Но уверен что есть ряд "типовых" конфигураций (наиболее часто необходимых), на которых можно бы было заострить внимание. "Докопался" до режима метапоиска, "докопался" как создать группировку по домену, но как её задействовать в выдаче и как оставить там настоящие урлы документов, а не "http://poiskoviserver.ru:17000/hl?url=webds/..." ... до этого пока не "докопался". Если б кто то помог реализовать такие варианты, думаю не одному мне было бы полезно.
В общем мы сейчас работаем и над документацией. Пока напишите на software@yandex-team.ru - я пришлю пример конфиг файла, чтобы дублей не было.
На ящик написал. Конфигурацию жду. Ну а если по документации будут какие то обновления - сообщайте, чтоб свеженькое скачать и почитать.

Дмитрий, не поделитесь крнфигом исключающем дубли?

слова "ветряной" и "ветреный" - разные, а основа одна
Хм. Если я правильно помню, чему в школе учили, основы тут тоже разные ("ветрен" и "ветрян"), т.к. основа - это все, кроме окончания. Вероятно, имелся ввиду корень.
Скажите, а почему оно не индексирует внутри фреймов?
Видимо до сих пор не было задачи сделать такую возможность.
Кстати, такую возможность еще никто не просил.
Да, понятно.
Просто у нас своя база данных в виде HTML, сдепланная на фреймах. Несколько дней пытался разобраться, почему не идёт индексирование.

Кстати, в конфигурации парсера html-файлов есть упоминание атрибута link - frame.src.
Здравствуйте,
В документации по Яндекс.Серверу говорится о гибкой настройке индексатора : "Возможность переиндексировать только измененные документы."   Существует возможность добавления новых документов в индекс?
Конечно!
Какой источник данных Вы используете?
bgarkushin,
спасибо за быстрый ответ.
Ситуация у нас следующая: При индексировании MS SQL через ODBC столкнулись с тем, что Яндекс.Сервер не может индексировать таблицы у которых в качестве первичного ключа используется строка (по крайней мере у нас не получилось).
Поэтому решили генерировать html (или xml) самостоятельно (по аналогии с тем как такие файлы делает Яндекс.Сервер) и скармливать эти файлы Яндекс.Серверу.



В идеале хочется иметь возможность добавлять/обновлять/удалять HTML/XML файлы в существующий индекс.

Подскажите, пожалуйста, как лучше добиться желаемого?

Вроде в документации есть информация про директиву Update.
Если вдруг не поможет, пишите.
>в документации есть информация про директиву Update "Если в директории, заданной в IndexDir, существует индекс, созданный при предыдущем индексировании, то будет производиться доиндексация: новые документы будут добавляться, измененные будут переиндексироваться, удаленные будут удалены, а неизменные останутся в текущем состоянии."
>Если вдруг не поможет, пишите. Как я понял, при индексировании базы данных с помощью ODBC Яндекс.Сервер динамически создает HTML-файлы и добавляет их в индекс.
Хочется аналогичного, только формировать HTML-файлы самостоятельно. В настоящий момент нашел такое, мне кажется не хорошее решение:

Что бы добавить страницу в индекс:
- Отредактировать yandex.cfg, указывая адрес новой страницы

    
        Config : -w localhost/data.aspx?id=2
    
- запустить индексирование
Тогда старый индекс не удалятся, а дополняется новой страницей

Что бы обновить страницу, тоже отредактировать yandex.cfg указывая адрес обновляемой страницы и запустить индексирование.

Модификация этого метода - это указать в yandex.cfg ссылку на страницу changes.asp на которой выводить ссылки на новые и измененные файлы (data.aspx?id=2, data.aspx?id=3, ...).

Правда пока не разобрался с тем как удалять документы.

Наверняка есть более красивый способ без полной переиндексации добавлять, обновлять и удалять документы в индекс.
У меня вопрос:

А у Вас html формируется прямо на сайт? и доступен через http?
>А у Вас html формируется прямо на сайт? Да, будет формироваться динамически, но тестировал на статических html файлах. >и доступен через http? да
Самый красивый способ - это самый простой способ.

По скольку решение, которое вы используете самое простое, предлагаю его и использовать.
Вас, понял. Спасибо.

На всякий случай, опишу те особенности Яндекс.Сервер которые мы выявили:

1. При идексировании MS SQL через ODBC нельзя индексировать таблицы у которых первичный ключ строка.

2. Нельзя указать порт в адресе индексируемой страницы:
! работает
StartUrls : localhost/all.htm

! не работает
StartUrls : localhost:8001/all.htm


3. Предположим вы индексируете файл all.htm в котором указаны ссылки на другие файлы в момент времени t_all
all.htm:

http://www.w3.org/1999/xhtml" > 

    
    Изменения
 

test1.htm test2.htm

У вас в индексе будет два файла (test1.htm, test2.htm)

Потом вы добавляете в all.htm еще одну ссылку, на файл test3.htm который был создан в момент времени t_test3
    test1.htm
    test2.htm
    test3.htm
и запускаете индексирование.
Если дата изменения файла test3.htm меньше даты индексирования all.htm (t_test3 < t_all), то файл test3.htm не будет добавлен в индекс. В индексе у вас по прежнему будет два файла (test1.htm, test2.htm).

4. Предположим у вас файл all.htm из пункта 3. Вы его индексируете - у вас в индексе два файла. Потом вы меняете файл test1.htm и снова запускаете индексацию по файлу all.htm. Изменения не попадут в индекс.
Что бы изменения попали в индекс нужно еще и обновить дату изменения all.htm.



p.s. Возможно (и скорее всего) выше описанное возникло исключительно из-за корявости моих рук и не у меня правильно настроить Яндекс.Сервер.
Нет, например проблема с первичным ключом возникла не только у Вас, поэтому с руками у Вас все в порядке.
Добавлю еще несколько замеченных особенностей.


5. Яндекс.Сервер установлен на Windows Server 2003 (32) и нацелен на индексирование сайта. Первый запуск индексирования проходит без ошибок. Если потом запустить индексирование повторно Яндекс.Сервер падает и перестает отвечать. После перезапуска ситуация повторяется - первое индексирование проходит, второе кладет службу.
На Windows Server 2008 таких проблем нет.


6. Вывод результатов в XML значительно медленнее чем в HTML.
Так же при выводе в HTML страница выводится постепенно, что позволяет парсить её "на лету". При выводе в XML Я.Сервер похоже формирует внутри себя весь документ и только потом целиком выплевывает.


7. Указанное (в XML или на стандартной HTML странице) количество найденный документов не соответствует количеству документов выводимых в результатах поиска.
Т.е. номер последнего документа на последней странице выдачи меньше чем указанное число найденных документов. сгрин 
Если произвести сортировку (по дате) то количество реально выводимых документов становится равным заявленному.
Как удалить файл из индекса?

Удаленная HTML-страничка возвращает HTTP статус 410, однако она не удаляется из индекса.

В логах вот такое:
Fri Apr 02 10:41:08 2010 [Webds] [INFO] - Can't open: localhost/yandex/Default.aspx: 410 (Gone)
Fri Apr 02 10:41:08 2010 [Webds] [DEBUG] - Removed: localhost/yandex/Default.aspx
Indexing was finished at Fri Apr 02 10:41:08 2010
It has been indexed 0 documents.
Index contains 1 documents. 
Добрый день,

Яндекс.Сервер установлен на Windows Server 2003 (32) и нацелен на индексирование сайта. Первый запуск индексирования проходит без ошибок. Если потом запустить индексирование повторно Яндекс.Сервер падает и перестает отвечать. После перезапуска ситуация повторяется - первое индексирование проходит, второе кладет службу.

Если Яндекс.Сервер установлен на windows vista (32) таких ошибок нет.

Что можно сделать в данной ситуации?
можно попробовать запускать Я.Сервер не через службу, а через консоль cmd
Документация на сайте (http://api.yandex.ru/server/doc/concepts/About.xml) и выложенном там же pdf (http://api.yandex.ru/server/doc/y-server-manual.pdf) отличается от документации которая идет в комплекте с "Я.Сервером 2009.05" скаченным отсюда http://company.yandex.ru/technology/server/shareware/download.xml.




Различается и описанный язык запросов.




В более старой документации, которая идет вместе с Я.Сервер, сказано что поиск по атрибутам осуществляется так: #atr_name="значение". И это работает в "Я.Сервером 2009.05"




В документации с сайта говорится что поиск по атрибутам надо производить так atr_name:"значение". Такой синтаксис у нас не работает.




Если посмотреть таблицу "Сравнение с синтаксисом версии 3.10.8" на странице

http://api.yandex.ru/server/doc/concepts/query-zones-and-attributes-search.xml

получается что в нашем "Я.Сервер 2009.05" используется старый язык запросов.




Где мы ошиблись?
Добрый день, огромное спасибо за наблюдательность.
Так уж вышло, что отдел документации ушел вперед разработки.
Документацию уже выпустили на следующую версию и опубликовали на api.yandex.ru, а вот продукт мы еще не готовы отдать на суд наших пользователей.

Ответ: Да, в Я.Сервер 2009.05 старый язык запросов.

Еще раз спасибо за внимание!

Заметил 2 странности:

1. При индексировании данных через ODBC, параметр Redirect (указанный в документации) в реальности не существует, индексатор говорит: Warning at line 34, col 5: section 'DataSrc' does not allow directive 'Redirect'. The directive will be ignored.

2. В Yandex.Server под windows чтобы получить xml в выдаче, нужно передать параметр "xml=da", под linux этот параметр игнорируется. При передаче "xml=yes" в заголовке ответа xml, а сама выдача - html.

В документации же указан только xml=yes.

1. Спасибо!
2.
- А Вы под windows пробовали "xml=yes"?
- Не понятно, заработало ли  "xml=yes" под linux?

Только что попробовал, под windows "xml=yes" тоже сработало, отдаёт нормальный xml.

Под linux не заработало никак. При "xml=da" отдаёт тот же html, как будто бы параметра нет,

при "xml=yes" в качестве Content-Type: text/xml; charset=utf-8,

однако в содержимом ответа - тот же html. Т.е. вопрос как получить xml остаётся открытым.

А можно на это посмотреть где-нибудь в сети?

Отправил ссылку в личку ещё в прошлый четверг, комментариев пока так и не дождался :-(

Вроде бы отвечал на все письма!

С какого почтового ящика было письмо?

Я писал через форму "Я.Онлайн" на http://bgarkushin.ya.ru

напишите лучше сюда: software@yandex-team.ru

Здравствуйте!


Богдан, подскажите пожалуйста, есть ли способ исключить из результатов поиска дубли?

Есть.


Нужно сделать метапоиск над базовым.


Поисковые запросы отправлять в метапоиск с дополнительным cgi-параметром: rd=4 или rd=5

Добрый

голову сломал не могу поставить на CentOS release 5.5 (Final)

поставил Perl и Python

Ошибка такая:


[root@devel init.d]# /etc/init.d/yandex-server.sh start
Starting Yandex.Server (/usr/local/sbin/yandex-server)
/usr/local/sbin/yandex-server: /usr/lib64/libz.so.1: no version information available (required by /usr/local/sbin/yandex-server)
/usr/local/sbin/yandex-server: /lib64/libc.so.6: version `GLIBC_2.7' not found (required by /usr/local/sbin/yandex-server)
/etc/init.d/yandex-server.sh start: error: cannot run /usr/local/sbin/yandex-server.
Try to find error description in  /var/local/yandex/yandex.log

Доброго времени суток,

На данный момент из всего многообразия дистрибутивов Linux поддерживаются только Fedora 11 и Debian 5.0. Также Яндекс.Сервер будет работать и на более новых дистрибутивах из данных линеек.

Добрый день.
Подскажите, пожалуйста, а где сейчас можно взять дистрибутив Яндекс.Сервера для FreeBSD 64?
В разделе скачивания есть только Линуксовые и Виндовые.

Богдан, спасибо вам и команде за Яндекс.Сервер!

Подскажите, как справиться с проблемой.

При индексировании с таким конфигом:

           
                HttpPrefix: http://site.ru/news.php
                Options: set group=news
           

           
                HttpPrefix: http://site.ru/adverts.php
                Options: set group=adverts
           

к URL указанным в HttpPrefix добавлеется в конце слэш "/".

Страницы новостей имеют адреса типа http://site.ru/news.php?id=2, http://site.ru/news.php?id=3 и т.д.

Получается что они не попадают под шаблом IndexedArea.

Как с этим бороться?

1. В W32 версии не работает Redirect

            Redirect http://www.site.int/index.php/$1/$2/$3

Никак не меняет ссылку в результате поиска. Так и остаётся что-то типа:

 

http://search.site.int:18000/hl?url=odbcds://4585&mime=text/html&charset=utf-8

В linux пока ещё не смог попробовать - модуль для mysql в дистрибутив не положили, а через odbc на linux'e что-то не завелось пока.

 

2. Сервер падает при клике на документ из результата поиска. Падает как на w32 так и на linux. При этом никак не могу найти где отключить в результатах поиска пересылку на /hl?url=odbcds%3A//, т.е. что бы была сразу ссылка на сайт с документом. Вырезать эту часть при выводе в шаблоне - это уже костыли.

Тут кажется не Redirect нужно использовать, а UseDirectUrls

Попробуйте, может все подлечится?
Да, еще, совет!
Тут лучше сделать немного по-другому, лучше сделать своим скриптом периодическую выгрузку необходимых для индексации данных из базы в файлы на диске,
а индексацию лучше всего делать уже через ftds

При таком способе решения, все будет работать максимально быстро и просто и никакие проблемы с Базами не будут влиять на процесс индексации и поиска.

Спасибо за совет. Как в данном случае быть с "Last-Modified" заголовком?  Как я понял в случае с базой его можно определить в TimeStamp, а если записи из базы будут лежать в виде html файлов, то в голову приходит только задать файлам аттрибуты фс с датой и временем.

 

Честно говоря после нескольких дней борьбы со связкой Яндекс.Сервера, unixODBC и MySQL так и не удалось всё это вместе закрутить. Уже начал поглядывать в сторону Сфинкса, видимо придётся его использовать если не получится с ЯС.

 

 

М.б. я туплю, но это не помогло....   dsindexer.cfg 

       

                Name : news

               

                       

                                Path : /tmp/yandex.server/newshtml

                       

                       

                                text/html : .html

                       

                       

                                Options : UseDirectUrls