Elasticsearch ni injini ya utaftaji iliyo na json rest api, kwa kutumia Lucene na imeandikwa katika Java. Maelezo ya faida zote za injini hii yanapatikana tovuti rasmi. Katika kile kinachofuata tutarejelea Elasticsearch kama ES.
Injini zinazofanana hutumiwa kwa utafutaji tata katika hifadhidata ya hati. Kwa mfano, tafuta kwa kuzingatia mofolojia ya lugha au tafuta kwa kuratibu za kijiografia.
Katika nakala hii nitazungumza juu ya misingi ya ES kwa kutumia mfano wa kuorodhesha machapisho ya blogi. Nitakuonyesha jinsi ya kuchuja, kupanga na kutafuta hati.
Ili kutotegemea mfumo wa uendeshaji, nitafanya maombi yote kwa ES kwa kutumia CURL. Pia kuna programu-jalizi ya google chrome inayoitwa maana.
Maandishi yana viungo vya hati na vyanzo vingine. Mwishoni kuna viungo vya ufikiaji wa haraka wa nyaraka. Ufafanuzi wa maneno yasiyojulikana yanaweza kupatikana katika misamiati.
Inasakinisha ES
Ili kufanya hivyo, kwanza tunahitaji Java. Watengenezaji Kupendekeza sakinisha matoleo ya Java mapya zaidi kuliko sasisho la Java 8 20 au sasisho la Java 7 55.
ES imeundwa kiotomatiki faharisi blog na aina ya chapisho. Tunaweza kuchora mlinganisho wa masharti: faharisi ni hifadhidata, na aina ni jedwali katika hifadhidata hii. Kila aina ina mpango wake - ramani, kama meza ya uhusiano. Kuchora ramani hutengenezwa kiotomatiki wakati hati imeorodheshwa:
# ΠΠΎΠ»ΡΡΠΈΠΌ mapping Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/_mapping?pretty"
Katika majibu ya seva, niliongeza maadili ya uwanja wa hati iliyoonyeshwa kwenye maoni:
Inafaa kukumbuka kuwa ES haitofautishi kati ya thamani moja na safu ya maadili. Kwa mfano, sehemu ya kichwa ina kichwa tu, na sehemu ya lebo ina safu ya mifuatano, ingawa inawakilishwa kwa njia sawa katika upangaji ramani.
Tutazungumza zaidi kuhusu ramani baadaye.
Maombi
Kurejesha hati kwa kitambulisho chake:
# ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ id 1 ΡΠΈΠΏΠ° post ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/post/1?pretty"
Vifunguo vipya vilionekana kwenye jibu: _version ΠΈ _source. Kwa ujumla, funguo zote kuanzia na _ zimeainishwa kama rasmi.
Muhimu _version inaonyesha toleo la hati. Inahitajika kwa utaratibu wa kufungia wenye matumaini kufanya kazi. Kwa mfano, tunataka kubadilisha hati iliyo na toleo la 1. Tunawasilisha hati iliyobadilishwa na kuonyesha kuwa hii ni mabadiliko ya hati yenye toleo la 1. Ikiwa mtu mwingine pia alihariri hati yenye toleo la 1 na kuwasilisha mabadiliko mbele yetu, basi ES haitakubali mabadiliko yetu, kwa sababu huhifadhi hati na toleo la 2.
Muhimu _source ina hati ambayo tuliorodhesha. ES haitumii thamani hii kwa shughuli za utafutaji kwa sababu Fahirisi hutumiwa kutafuta. Ili kuokoa nafasi, ES huhifadhi hati ya chanzo iliyobanwa. Ikiwa tunahitaji kitambulisho pekee, na sio hati nzima ya chanzo, basi tunaweza kuzima hifadhi ya chanzo.
Ikiwa hatuhitaji maelezo ya ziada, tunaweza kupata maudhui ya _source pekee:
Tulichagua chapisho la mwisho. size inapunguza idadi ya hati zinazopaswa kutolewa. total inaonyesha jumla ya idadi ya hati zinazolingana na ombi. sort katika pato ina safu ya nambari kamili ambayo upangaji unafanywa. Wale. tarehe ilibadilishwa kuwa nambari kamili. Habari zaidi juu ya kupanga inaweza kupatikana katika nyaraka.
Vichujio na maswali
ES kwa kuwa toleo la 2 halitofautishi kati ya vichungi na hoja, badala yake dhana ya miktadha imeanzishwa.
Muktadha wa hoja hutofautiana na muktadha wa kichujio kwa kuwa hoja hutoa _score na haijahifadhiwa. Nitakuonyesha _score ni nini baadaye.
Chuja kwa tarehe
Tunatumia ombi mbalimbali katika muktadha wa kichungi:
Hata hivyo, ikiwa tunatafuta "hadithi" katika uwanja wa maudhui, hatutapata chochote, kwa sababu Faharasa ina maneno asilia tu, sio mashina yao. Ili kufanya utafutaji wa ubora wa juu, unahitaji kusanidi analyzer.
Shamba _score inaonyesha umuhimu. Ikiwa ombi litatekelezwa katika muktadha wa kichujio, basi thamani ya _score itakuwa sawa na 1 kila wakati, ambayo inamaanisha ulinganifu kamili na kichujio.
Wachambuzi
Wachambuzi zinahitajika ili kubadilisha maandishi chanzo kuwa seti ya tokeni.
Wachambuzi hujumuisha moja Kiashiria na hiari kadhaa Vichujio vya Ishara. Tokenizer inaweza kutanguliwa na kadhaa Vichungi vya Char. Viashiria huvunja mfuatano wa chanzo kuwa ishara, kama vile nafasi na herufi za uakifishaji. TokenFilter inaweza kubadilisha tokeni, kufuta au kuongeza mpya, kwa mfano, kuacha tu shina la neno, kuondoa prepositions, kuongeza visawe. CharFilter - hubadilisha kamba nzima ya chanzo, kwa mfano, hupunguza vitambulisho vya html.
Kichanganuzi cha kawaida kiligawanya kamba kwa nafasi na kubadilisha kila kitu kuwa herufi ndogo, mchanganuzi wa Kirusi aliondoa maneno yasiyo muhimu, akaibadilisha kuwa herufi ndogo na kuacha shina la maneno.
Wacha tuone ni Tokenizer gani, TokenFilters, CharFilters analyzer ya Kirusi hutumia:
Hebu tueleze analyzer yetu kulingana na Kirusi, ambayo itakata vitambulisho vya html. Wacha tuite chaguo-msingi, kwa sababu kichanganuzi kilicho na jina hili kitatumika kwa chaguo-msingi.
Kwanza, vitambulisho vyote vya HTML vitaondolewa kwenye kamba ya chanzo, kisha kiwango cha tokenizer kitaigawanya katika ishara, ishara zinazosababisha zitahamia kwa ndogo, maneno yasiyo na maana yataondolewa, na ishara zilizobaki zitabaki shina la neno.
Kuunda index
Hapo juu tulielezea kichanganuzi chaguo-msingi. Itatumika kwa sehemu zote za kamba. Chapisho letu lina safu ya lebo, kwa hivyo lebo pia zitachakatwa na kichanganuzi. Kwa sababu Tunatafuta machapisho kulingana na tagi, basi tunahitaji kuzima uchanganuzi wa uga wa lebo.
Wacha tuunde blogi ya index2 na kichanganuzi na uchoraji ramani, ambapo uchanganuzi wa uga wa vitambulisho umezimwa:
Kwa sababu Tunatumia kichanganuzi chenye asili ya Kirusi, basi ombi hili litarejesha hati zote, ingawa zina neno 'historia' pekee.
Ombi linaweza kuwa na herufi maalum, kwa mfano:
""fried eggs" +(eggplant | potato) -frittata"
Omba 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
Ikiwa una nia ya makala-masomo kama hayo, una mawazo ya makala mpya, au una mapendekezo ya ushirikiano, basi nitafurahi kupokea ujumbe katika ujumbe wa kibinafsi au kwa barua pepe. [barua pepe inalindwa].