Elasticsearch ke enjine ea ho batla e nang le json rest api, e sebelisang Lucene mme e ngotsoe ka Java. Tlhaloso ea melemo eohle ea enjene ena e fumaneha ho websaete ea molao. Ho se latelang re tla bitsa Elasticsearch e le ES.
Lienjineri tse ts'oanang li sebelisoa bakeng sa lipatlisiso tse rarahaneng polokelong ea litokomane. Ka mohlala, batla ka ho nahanela morphology ea puo kapa batla ka li-geo coordinates.
Sehloohong sena ke tla bua ka lintho tsa motheo tsa ES ho sebelisa mohlala oa indexing blog posts. Ke tla u bontša mokhoa oa ho sefa, ho hlophisa le ho batla litokomane.
E le hore ke se ke ka itšetleha ka mokhoa oa ho sebetsa, ke tla etsa likōpo tsohle ho ES ho sebelisa CURL. Ho boetse ho na le plugin ea google chrome e bitsoang kelello.
Mongolo o na le likhokahano tsa litokomane le mehloli e meng. Qetellong ho na le lihokelo tsa ho fihlella kapele litokomane. Litlhaloso tsa mantsoe a sa tloaelehang li ka fumanoa ho mantsoe a hlalosang mantsoe.
Ho kenya
Ho etsa sena, re hloka Java pele. Bahlahisi khothaletsa kenya liphetolelo tsa Java tse ncha ho feta Java 8 update 20 kapa Java 7 update 55.
# Добавим документ c id 1 типа post в индекс blog.
# ?pretty указывает, что вывод должен быть человеко-читаемым.
curl -XPUT "$ES_URL/blog/post/1?pretty" -d'
{
"title": "Веселые котята",
"content": "<p>Смешная история про котят<p>",
"tags": [
"котята",
"смешная история"
],
"published_at": "2014-09-12T20:44:42+00:00"
}'
ES e entsoe ka bo eona index blog le mofuta poso. Re ka etsa papiso e nang le maemo: index ke database, 'me mofuta ke tafole sebakeng sena sa polokelo. Mofuta o mong le o mong o na le morero oa oona - ho tseba likarolo, joalo ka tafole ea likamano. 'Mapa o etsoa ka bo eona ha tokomane e thathamisitsoe:
# Получим mapping всех типов индекса blog
curl -XGET "$ES_URL/blog/_mapping?pretty"
Karabelong ea seva, ke kentse boleng ba likarolo tsa tokomane e ngolisitsoeng ho maikutlo:
Ke habohlokoa ho hlokomela hore ES ha e khetholle pakeng tsa boleng bo le bong le letoto la boleng. Ka mohlala, sebaka sa sehlooho se na le sehlooho feela, 'me sebaka sa li-tags se na le likhoele tse ngata, le hoja li emeloa ka tsela e tšoanang' mapa.
Re tla bua haholoanyane ka 'mapa hamorao.
Likopo
Ho fumana tokomane ka id ea eona:
# извлечем документ с id 1 типа post из индекса blog
curl -XGET "$ES_URL/blog/post/1?pretty"
Ho hlahile linotlolo tse ncha karabong: _version и _source. Ka kakaretso, linotlolo tsohle ho qala ka _ li khetholloa e le tsa molao.
Senotlolo _version e bonts'a mofuta oa tokomane. Hoa hlokahala hore mokhoa o nang le tšepo oa ho notlela o sebetse. Ka mohlala, re batla ho fetola tokomane e nang le mofuta oa 1. Re fana ka tokomane e fetotsoeng 'me re bontša hore ena ke tokomane e fetoletsoeng ka mofuta oa 1. Haeba motho e mong a boetse a hlophisa tokomane e nang le mofuta oa 1' me a kenya liphetoho ka pel'a rona, joale ES e ke ke ea amohela liphetoho tsa rona, hobane e boloka tokomane le mofuta oa 2.
Senotlolo _source e na le tokomane eo re e thathamisitseng. ES ha e sebelise boleng bona bakeng sa ts'ebetso ea ho batla hobane Li-index li sebelisoa ho batla. Ho boloka sebaka, ES e boloka tokomane ea mohloli e hatisitsoeng. Haeba re hloka id feela, eseng tokomane eohle ea mohloli, re ka tima polokelo ea mohloli.
Haeba re sa hloke lintlha tse ling, re ka fumana feela litaba tsa _source:
curl -XPUT "$ES_URL/blog/post/3" -d'
{
"title": "Как у меня появился котенок",
"content": "<p>Душераздирающая история про бедного котенка с улицы<p>",
"tags": [
"котята"
],
"published_at": "2014-07-21T20:44:42+00:00"
}'
Ho hlophisa
# найдем последний пост по дате публикации и извлечем поля title и published_at
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"size": 1,
"_source": ["title", "published_at"],
"sort": [{"published_at": "desc"}]
}'
Re khethile poso ea ho qetela. size e fokotsa palo ea litokomane tse lokelang ho fanoa. total e bonts'a palo eohle ea litokomane tse tsamaellanang le kopo. sort sephethong se na le palo ea palo e felletseng eo ho hlopha ho etsoang ka eona. Tseo. letsatsi le fetotsoe ho palo e felletseng. Lintlha tse ling mabapi le ho hlopha li ka fumanoa ho litokomane.
Lisefe le lipotso
ES kaha mofuta oa 2 ha o khetholle lipakeng tsa li-filters le lipotso, ho fapana le hoo ho hlahisoa mohopolo oa maemo.
Taba ea potso e fapane le sebopeho sa filthara hobane potso e hlahisa _score mme ha e bolokoe. Ke tla u bontša hore na _score ke eng hamorao.
Sefa ho latela letsatsi
Re sebelisa kopo lethathama moelelong oa filthara:
# получим посты, опубликованные 1ого сентября или позже
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"filter": {
"range": {
"published_at": { "gte": "2014-09-01" }
}
}
}'
Sefa ka li-tag
Re sebelisa potso ea nako ho batla li-ID tsa litokomane tse nang le lentsoe le fanoeng:
# найдем все документы, в поле tags которых есть элемент 'котята'
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"_source": [
"title",
"tags"
],
"filter": {
"term": {
"tags": "котята"
}
}
}'
Leha ho le joalo, haeba re batla "lipale" tšimong ea litaba, re ke ke ra fumana letho, hobane Lenane lena le na le mantsoe a pele feela, eseng likutu tsa ’ona. E le hore u etse lipatlisiso tsa boleng bo phahameng, u lokela ho lokisa analyzer.
tšimo _score e bontša bohlokoa. Haeba kopo e etsoa ka mokhoa oa sefe, joale boleng ba _score bo tla lula bo lekana le 1, e bolelang hore ho tšoana ho feletseng le sefe.
Bahlahlobisisi
Bahlahlobisisi lia hlokahala ho fetolela mongolo oa mohloli hore e be sehlopha sa li-tokens.
Analyzers e na le e le 'ngoe Tokenizer le tse 'maloa boikhethelo Li-tokenFilters. Tokenizer e ka 'na ea etelloa pele ke tse' maloa CharFilters. Li-tokenizer li roba khoele ea mohloli ho li-tokens, joalo ka libaka le litlhaku tsa matšoao. TokenFilter e ka fetola li-tokens, ea hlakola kapa ea eketsa tse ncha, ho etsa mohlala, ea siea feela kutu ea lentsoe, tlosa liemeli, eketsa mahlalopa. CharFilter - e fetola khoele eohle ea mohloli, mohlala, e fokotsa li-tag tsa html.
Ha re nke monyetla API 'me re bone hore na bahlahlobi ba tloaelehileng le ba Russia ba fetola khoele joang "Lipale tse qabolang ka likatsana":
# используем анализатор standard
# обязательно нужно перекодировать не ASCII символы
curl -XGET "$ES_URL/_analyze?pretty&analyzer=standard&text=%D0%92%D0%B5%D1%81%D0%B5%D0%BB%D1%8B%D0%B5%20%D0%B8%D1%81%D1%82%D0%BE%D1%80%D0%B8%D0%B8%20%D0%BF%D1%80%D0%BE%20%D0%BA%D0%BE%D1%82%D1%8F%D1%82"
Mohlahlobi ea tloaelehileng o ile a arola khoele likheong 'me a fetola ntho e' ngoe le e 'ngoe hore e be litlhaku tse tlaase, mohlahlobi oa Serussia o ile a tlosa mantsoe a sa reng letho, a a fetola hore e be litlhaku tse tlaase ebe o siea kutu ea mantsoe.
Ha re boneng hore na ke Tokenizer efe, TokenFilters, CharFilters eo mohlahlobi oa Serussia a e sebelisang:
Ha re hlalose mohlahlobi oa rona ho latela Serussia, se tla seha li-tag tsa html. Ha re e bitse kamehla, hobane mohlahlobi ea nang le lebitso lena o tla sebelisoa ka ho sa feleng.
Ntlha ea pele, li-tag tsohle tsa HTML li tla tlosoa mohloling oa mohloli, joale tekanyo ea tokenizer e tla e arola ka li-tokens, li-tokens tse hlahisoang li tla fallela boemong bo tlaase, mantsoe a sa reng letho a tla tlosoa, 'me matšoao a setseng a tla sala e le kutu ea lentsoe.
Ho theha index
Ka holimo re hlalositse analyzer ea kamehla. E tla sebetsa libakeng tsohle tsa likhoele. Poso ea rona e na le li-tag tse ngata, kahoo li-tag le tsona li tla sebetsoa ke mohlahlobi. Hobane Re batla lipapatso ka ho ts'oana hantle le tag, ebe re hloka ho thibela tlhahlobo ea sebaka sa li-tag.
Ha re theheng blog2 ea index e nang le mohlahlobi le 'mapa, moo tlhahlobo ea sebaka sa li-tag e koetsoeng:
Ha re kenyeng li-post tse 3 tse tšoanang ho index ena (blog2). Ke tla tlohela mokhoa ona hobane ... ho tšoana le ho kenya litokomane ho index ea blog.
Patlo ea mongolo o felletseng ka tšehetso ea polelo
Ha re shebeng mofuta o mong oa kopo:
# найдем документы, в которых встречается слово 'истории'
# query -> simple_query_string -> query содержит поисковый запрос
# поле title имеет приоритет 3
# поле tags имеет приоритет 2
# поле content имеет приоритет 1
# приоритет используется при ранжировании результатов
curl -XPOST "$ES_URL/blog2/post/_search?pretty" -d'
{
"query": {
"simple_query_string": {
"query": "истории",
"fields": [
"title^3",
"tags^2",
"content"
]
}
}
}'
Hobane Re sebelisa analyzer e nang le stemming ea Serussia, joale kopo ena e tla khutlisa litokomane tsohle, leha li na le lentsoe 'histori' feela.
Kopo e ka ba le litlhaku tse ikhethileng, mohlala:
""fried eggs" +(eggplant | potato) -frittata"
Kopa syntax:
+ signifies AND operation
| signifies OR operation
- negates a single token
" wraps a number of tokens to signify a phrase for searching
* at the end of a term signifies a prefix query
( and ) signify precedence
~N after a word signifies edit distance (fuzziness)
~N after a phrase signifies slop amount
# найдем документы без слова 'щенки'
curl -XPOST "$ES_URL/blog2/post/_search?pretty" -d'
{
"query": {
"simple_query_string": {
"query": "-щенки",
"fields": [
"title^3",
"tags^2",
"content"
]
}
}
}'
# получим 2 поста про котиков
Haeba u thahasella lingoloa tse tšoanang-lithuto, u na le mehopolo bakeng sa lingoliloeng tse ncha, kapa u na le litlhahiso tsa tšebelisano, ke tla thabela ho amohela molaetsa ka molaetsa oa hau kapa ka lengolo-tsoibila. [imeile e sirelelitsoe].