Много вопросов от новичка


(leov) #1

Здравствуйте!
пытаюсь изучать эластик потому как надо допилить одну софтину работающую криво
не скажу что уж совсем новичек
но эта тема идет уж так туго что просто удивляюсь себе
хотел бы найти где позадавать вопросы. если не туда попал то не ругайте сильно

ну и первый для затравки
почему же тут всё так ужасно неструктурировано
как вообще можно существовать без четкой спецификации языка запросов
после четких определений в sql просто никакой опоры не найти во всей этой куче примеров
вот смотрю есть стока curl -XGET "$ES_URL/blog/post/_search
хочется увидеть перечень того что там еще бывает на месте _search
и не в терминах "а вот бывает еще так, и еще вот так" а исчерпывающий список
с небольшим описанием к каждому и ссылкой на пункт документации

если разговор завяжется то продолжу
заранее спасибо.


(Igor Motov) #2

Я бы начал с изучения документации. Например, вот все что может быть на URI. А тут, все, что может быть в самом запросе. Элемент query содержит запрос, который описывается язком запросов.


(leov) #3

спасибо что откликнулись
я безусловно изучаю всю эту и еще кучу другой документации, видео смотрю и пр.
но к сожалению с английским языком не шибко в дружбе, поэтому детали плохо вижу.
вот это "Например, вот все что может быть на URI" конечно видел но это не про то что я спросил
я спросил про _search и что бывает вместо него.
полный перечень _команд (или как там их назвать правильнее)
ну теперь уже чуть разобрался что бывает _mapping _settings ....
но должен быть где-то полный перечень, а он размазан тонким слоем по всему руководству
в руководстве по sql такое есть, а тут нету...
вы не сочтите за пустое брюзжание, но новичку очень ярко видно какие-то недостатки
уверен что пройдет еще пару недель, я найду точки куда внести правки в своей системе
и может сюда больше не вернусь, но следующий новичек пойдет по тем-же граблям

вот следующий вопрос про анализаторы
пока не вникая особо в глубину вопроса
вот есть в системе какие-то анализаторы - хотелось бы узнать полный их перечень
тех которые есть в системе свежеустановленной с каким-то минимальным описанием
лучше бы была какая-то команда которая бы вывела их
а то все разговоры "бывает такой... бывает другой..."
далее и вы тут или еще кто говорит вот типа русский был вот такой а мы его вот так вот изменим
но как можно узнать то самое определение стандартного русского анализатора? (или любого другого)
лучше бы была какая-то команда которая бы вывела его
я подозреваю что если залезть в исходники то там это таки есть. но лезть туда пока не хочется


(Igor Motov) #4

Я не совсем уверен, зачем вам этот перечень нужен, но посмотреть его можно тут. Каждый файл описывает одну команду со ссылкой на документацию.

Это понятно. Из собственного опыта могу сказать, что чем быстрее вы отбросите предвзятые идеи о том, что все должно быть так, потому что так было в SQL, тем проще будет этот процесс. И я имею в виду не только документацию. Elasticsearch это не реляционная база дынных, это поисковый и аналитический движок. Поэтому тут все не так. Реляционные базы строятся на основе "реляционная модели данных" (РМД), Elasticsearch построен на основе "Информационного поиска" (ИП). Совсем другая теоретическая основа, которую редко преподают в университетах, в отличии от РМД. Поэтому документация и пытается заполнить пробелы в знании большинства начинающих пользователей через примеры.

Перечень в документации https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

Строение русского анализатора описано в документации. Он использует русский стеммер, алгоритм, которого описан тут.


(leov) #5

что-то не врубился я как вот такие цитаты делать поэтому по пунктикам отвечу
1.очень полезно. буду изучать.
там в каждом файле есть например "documentation": "http://www.elastic.co/guide/en/elasticsearch/reference/master/indices-analyze.html",
дак вот в документации должна быть встречная ссылка на этот файл
я правда на первый взгляд не понял какую роль играют эти файлы. хорошо если определяющую
нет, не определяющую. просто часть документации. в общем именно то что я хотел
2.вот ей богу нет не капли предвзятости. есть необходимость разобраться.
но есть ощущение что я стою уже которую неделю на корачках и из большой кучи примеров пытаюсь выбрать жемчужины знания :slight_smile:
вместо того чтобы эти жемчужины лежали бы рядом в коробочке в ячеечках
я отдаю себе отчет в том что мой sql-ный взгляд ущербный на фоне ИП
но документация тут не совсем хороша IMHO. по крайней мере могла бы быть лучше
3.значит это исчерпывающий перечень. хорошо. буду изучать
хотя я еще огребу тут неприятностей в связи с тем что эластик у меня стоит древний 1.??
ну может тут подскажете как ловчее его проапдейтить не порушив систему
4.спасибо тоже буду изучать. проясняется взгляд

спасибо вам. завтра продолжу


(leov) #6

продолжу. еще пара вопросов
1.есть какой-то индекс. запросы работают, данные приходят. мапинг индекса посмотрел.
дак мапинг нифига не соответствует данным
вероятнее всего так уж исторически сложилось. теоретически надо привести в соответствие.
правильно ли я понимаю что документы в индекс лягут любые независимо от текущего мапинга
и поиск по ним в принципе будет (если таки запросы позволят)
но правильный мапинг позволит все это сделать лучше
и желательно его таки привести в соответствие
2.если к эластику обратиться из браузера просто без аргументов
то он отвечает какую-то информацию про сам эластик (версия и пр.)
(вот кстати на удаленном отвечал, а вот сейчас на локальном не отвечает почему-то...
на http://127.0.0.1:9300/ пишет This is not a HTTP port)
как написать такой-же запрос в кибане?
и вообще вот приводят примеры кто в кибане кто в curl
а как повторить какой-то пример на curl в кибане не понятно
вот ключь ?pretty так и не смог в кибане приладить


(Igor Motov) #7

да

Elasticsearch поддерживает два протокола - HTTP для работы с клиентами (порт 9200), и внутренний протокол для обмена информацией между нодами (порт 9300). Вам нужно было использовать http://127.0.0.1:9200/

GET /

Можно просто скопировать пример на curl и вставить его в кибану. Кибана его автоматически сконвертирует в нужный формат.

В кибане все уже pretty


(leov) #8
  1. спасибо. значит старый мапинг в печку и лепим новый по содержимому
  2. да, просто опечатка
  3. ошибки новичка. пока про всем граблям не пройдешся ничего не поймешь. спасибо
  4. спасибо попробую
  5. ок спасибо

продолжение следует


(leov) #9

вот есть анализатор существующий в версии 1.7.4
выдрал его оттуда через get _mappings
пытаюсь поднять его на текущем эластике а оно ругается на russian_morphology (отрезал его)
подскажите в чем ошибка
сам анализатор наверняка кривой. может и про него что-то скажете

PUT base1
{
  "settings" : {
    "analysis" : {
      "filter" : {
        "my_stopwords" : {
          "type" : "stop",
          "stopwords" : [ "а,без,более,бы,был,была,были,было,быть,в,вам,вас,весь,во,вот,все,всего,всех,вы,где,да,даже,для,до,его,ее,если,есть,еще,же,за,здесь,и,из,или,им,их,к,как,ко,когда,кто,ли,либо,мне,может,мы,на,надо,наш,не,него,нее,нет,ни,них,но,ну,о,об,однако,он,она,они,оно,от,очень,по,под,при,с,со,так,также,такой,там,те,тем,то,того,тоже,той,только,том,ты,у,уже,хотя,чего,чей,чем,что,чтобы,чье,чья,эта,эти,это,я,a,an,and,are,as,at,be,but,by,for,if,in,into,is,it,no,not,of,on,or,such,that,the,their,then,there,these,they,this,to,was,will,with" ]
        }
      },
      "char_filter" : {
        "my_mapping" : {
          "type" : "mapping",
          "mappings" : [ "ё=>е" ]
        }
      },
      "analyzer" : {
        "custom_with_char_filter" : {
          "char_filter" : [ "my_mapping" ],
          "tokenizer" : "standard"
        },
        "ru_analyzer" : {
          "filter" : [ 
            "lowercase", 
            "my_stopwords"//, 
            //"russian_morphology", 
            //"english_morphology" 
          ],
          "type" : "custom",
          "tokenizer" : "standard"
        }
      }
    }
  }
}  

(leov) #10

вот еще обнаружил что на консоли эластика вылезли ошибки java
во время моих экспериментов с мапингом
кому нибудь из разработчиков они могут быть интересны?
вероятно где-то остались дырки в которых exception не обработали


(Igor Motov) #11

russian_morphology это плагин, он не является официальной частью elasticsearch, его надо отдельно ставить

Анализатор обычно добавляется, чтобы достичь определенный цели. Я не знаю, какая у вас цель, поэтому не могу сказать, соответсвует ли данный анализатор вашей цели.

Если бы exception не обработали, то elasticsearch бы упал. Просто elasticsearch пишет в лог некоторые "интересные" пользовательские ошибки вместе со стеком, что упрощает анализ этих ошибок. Когда вы запускаете elasticsearch с командой строки, лог выводиться на экран.


(leov) #12

поставил старый эластик. (но к сожалению не нашел на downloads 1.7.4 . поставил 1.7.3)
поставил соответствующий плагин 1.2.1
правильно ли считать что этот плагин можно ставить только в соответствии с приведенными тут версиями https://github.com/imotov/elasticsearch-analysis-morphology
т.е если поставить свежий эластик то для него такого плагина нет?
если это не так то надо что-то в описании подправить, потому как я тут в разговорах видел что не я один это так понимаю

чтобы искало при вводе на сайте в строке поиска
вообще ничего особенного
не понимаю почему так сложно написано
и почему так плохо ищет
почему "вет" не ищет ветеринар
почему "ветеринар" не ищет ветеринарный
....


(leov) #13

удалось прогнать весь мапинг вместе с тем аналайзером
вопросы

  1. есть ли какая-то возможность оценить адекватность мапинга всем имеющимся данным?
    а то что там куда попало, что пропало.... как-то бы какой-то командой вытащить все документы и поля которые не соответствуют
  2. с описанием мапинга и анализатора опять трудности с пониманием что написано. совершенно не понятно какие слова являются ключевыми (элементами синтаксиса) а какие просто введенные пользователем имена или просто значения
PUT base1
{
  "settings" : {    //ключевое слово (какие еще бывают? "mapping" бывает...)
    "analysis" : {  //ключевое слово (какие еще бывают под "settings"?)
      "filter" : {  //ключевое слово (какие еще бывают в "analysis"? ниже есть "char_filter" "analyzer")
        "my_stopwords" : { //придуманное нами имя которое потом будет использовано в "analyzer"
          "type" :         //ключевое слово (какие бывают еще слова?) 
                 "stop",   //ключевое слово для типов (какие бывают еще значения?)(нашел. немало их там) 
          "stopwords" : //ключевое слово заисящее от значения типа
                 [ "а,без,более,....." ] //просто перечень значений
        }
      },
      "char_filter" : {  //ключевое слово
        "my_mapping" : {  //придуманное нами имя которое потом будет использовано в "analyzer"
          "type" : //ключевое слово
                 "mapping", //ключевое значение для чарфильтров. еще бывают вроде html_strip и pattern_replace
          "mappings" : [ "ё=>е" ] //ключевое слово для чарфильтров типа=мапинг и пары что на что заменять
        }
      },
      "analyzer" : {  //ключевое слово
        "custom_with_char_filter" : {  //придуманное нами имя анализатора которое потом будет использовано при описании маппинга
          "char_filter" : //ключевое слово. в значениях последовательность токен-фильтров, как стандартных или из плагинов, так и собственных описанных в analysis.char_filter
                        [ "my_mapping" ],  //собственный
          "tokenizer" : //ключевое слово
                      "standard"  //название предустановленного токенайзера
        },
        "ru_analyzer" : {  //придуманное нами имя анализатора которое потом будет использовано при описании маппинга
          "filter" : [ //ключевое слово. в значениях последовательность токен-фильтров, как стандартных или из плагинов, так и собственных описанных в analysis.filter
            "lowercase",  //стандартный (существующий в системе изначально) 
            "my_stopwords", //собственный
            "russian_morphology", //из плагина
            "english_morphology" //из плагина
          ],
          "type" : //ключевое слово. видимо тип аналайзера это необязательный элемент
                   "custom",  //ключевое слово. какие еще бывают типы аналайзеров?
          "tokenizer" : //ключевое слово
                     "standard" //один из множества стандартных токенайзеров (может можно и из плагинов. просто пока не встречал)
        }
      }
    }
  }
}  

пока писал в общем понимание значительно продвинулось :slight_smile:
надо уже начинать экспериментировать


(leov) #14

Уважаемый Igor_Motov
не могли бы вы ответить на мои вопросы
очень надо.


(Igor Motov) #15

Если вам действительно нужен этот плагин, то скачайте 5.6.5 и работайте с этой версией. Для нее плагин есть. На 1.7.3 установки по умолчанию небезопасны.

Маппинг должен быть адекватен не только имеющимся данным но и типам запросов, которые вы на этих данных будете выполнять. Поэтому автоматических средств определить адекватность нет.

Посмотрите документации, почитайте блог посты. Вся эта информация есть в сети в доступной форме.


(leov) #16

вот этот момент для меня особенно важен
1.7.3 я просто брал как самый близкий к тому что сейчас есть в проекте(старый уже проект)
его безусловно нужно будет обновить и вопрос на что надо его обновлять
логично обновить до самого свежего стабильного, но для него нет плагина (нет особой аргументации зачем мне тот плагин. просто был такой, ну думается пусть и дальше будет)
значит таки плагин нужно брать в точном соответствии с той таблицей
значит надо брать эластик 5.6.5 и плагин соответствующий
это нормальные стабильные версии до которых стоит проапгредится?
просто вот на 1.7.3 заметил что он довольно сильно от текущей версии отличается и по документации и по командам (например на _analyse сильно иначе отызвается)
и не понятно как 5.6.5 не слишком ли старый

вы конечно правы
но мапинг лежит в индексе, данные тоже в индексе. логично было бы иметь инструмент оценить их соответствие... ну нет так нет
а нет ли возможности вывести какой-то документ с его фактическим мапингом?
(с теми типами с какими он фактически сейчас храниться)
в том числе с тем что замапилось автоматически(никак не прописаны)
с тем что замапилось через _default_ ну и с тем что явно
вопрос в принципе логичный и что-то такое должно бы быть (может и есть но я просмотрел)

читал уже обе эти ссылки и в понимании уже достаточно продвинулся
тут вопрос больше к документации
что вот тех много вопросов что в примере мапинга
очень с трудом ищутся в разных концах документации
и я может доведу до вас мысль что такая сводная форма должна бы быть где-то в описании
и вы может сможете повлиять на то чтобы такое в ней появилось....
ну если не получилось то в общем и ладно. значит я не слишком прав

спасибо за ответы. уже немного вопросов осталось


(Igor Motov) #17

5.6.x будет поддерживаться до 2019-03-11 Подробности тут - https://www.elastic.co/support/eol

То, что вы получаете через /_mapping это и есть фактический маппинг - он один для всех документов и включает в себя поля, которые Elasticsearch динамически туда добавил.


(leov) #18

обнаружил в кибане интересную дырку
поставил я ее свежую вместе со свежим эластиком
запустил, все путем работает
потом получил доступ к рабочему древнему эластику (у хостера долго выбивали)
не закрывая браузер поменял конфигурацию, убил процесс кибаны, запустил заново
в браузере через кибану увидел старый эластик, поработал без проблем, все хорошо

потом бросило напряжение, комп перезагрузился
запускаю процесс кибаны а он заявляет что со старым эластиком он не дружит!!!!
иду через браузер к кибане - тоже говорит -не пойду ни в какую!!! версия несовместимая
очень удивился
потом повторил тот путь что был сначала, и я снова могу смотреть кибаной на старый эластик!!!

короче если на закрывая браузера с открытой кибаной
подменить ей эластик и перезапустить ее процесс
то можно работать со старыми эластиками
про которых кибана говорит что они типа несоместимы с текущей версии кибаны
в консоли кибаны видны какие-то вопли про красный уровень опсности и пр
но работает вроде
иначе я бы вообще не смог работать кибаной с моим древним эластиком
потому как старых дистрибутивов кибаны я не нашел

посмотрите сами стоит ли эту дырку кому-то из разработчиков предъявить


(Igor Motov) #19

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


(leov) #20

а у вас никаких нет глюков в анализаторе связанных со словом "жизнь"?
вообще его искать не хочет!!!
точнее "не было ли раньше" потому как я все на древнем эластике сижу и таком-же древнем плагине (скоро уже должен соскочить с него)