Mae Elasticsearch yn beiriant chwilio gyda json rest api, yn defnyddio Lucene ac wedi'i ysgrifennu yn Java. Mae disgrifiad o holl fanteision yr injan hon ar gael yn . Yn yr hyn sy'n dilyn byddwn yn cyfeirio at Elasticsearch fel ES.
Defnyddir peiriannau tebyg ar gyfer chwiliadau cymhleth mewn cronfa ddata o ddogfennau. Er enghraifft, chwilio gan gymryd i ystyriaeth morffoleg yr iaith neu chwilio yn Γ΄l cyfesurynnau geo.
Yn yr erthygl hon byddaf yn siarad am hanfodion ES gan ddefnyddio'r enghraifft o fynegeio postiadau blog. Byddaf yn dangos i chi sut i hidlo, didoli a chwilio dogfennau.
Er mwyn peidio Γ’ dibynnu ar y system weithredu, byddaf yn gwneud pob cais i ES gan ddefnyddio CURL. Mae yna hefyd ategyn ar gyfer google chrome o'r enw .
Mae'r testun yn cynnwys dolenni i ddogfennaeth a ffynonellau eraill. Ar y diwedd mae dolenni ar gyfer mynediad cyflym i'r ddogfennaeth. Gellir dod o hyd i ddiffiniadau o dermau anghyfarwydd yn .
Gosod ES
I wneud hyn, mae angen Java arnom yn gyntaf. Datblygwyr gosod fersiynau Java newyddach na Java 8 update 20 neu Java 7 update 55.
Mae'r dosbarthiad ES ar gael yn . Ar Γ΄l dadbacio'r archif mae angen i chi redeg bin/elasticsearch. Ar gael hefyd . Mae yna . .
Ar Γ΄l gosod a lansio, gadewch i ni wirio'r ymarferoldeb:
# Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
#export ES_URL=$(docker-machine ip dev):9200
export ES_URL=localhost:9200
curl -X GET $ES_URLByddwn yn derbyn rhywbeth fel hyn:
{
"name" : "Heimdall",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.2.1",
"build_hash" : "d045fc29d1932bce18b2e65ab8b297fbf6cd41a1",
"build_timestamp" : "2016-03-09T09:38:54Z",
"build_snapshot" : false,
"lucene_version" : "5.4.1"
},
"tagline" : "You Know, for Search"
}Mynegeio
Gadewch i ni ychwanegu post at ES:
# ΠΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ 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"
}'
ymateb gweinydd:
{
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_version" : 1,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : false
}
ES wedi'i greu'n awtomatig blog a post. Gallwn lunio cyfatebiaeth amodol: cronfa ddata yw mynegai, a math yw tabl yn y gronfa ddata hon. Mae gan bob math ei gynllun ei hun β , yn union fel tabl perthynol. Cynhyrchir mapio yn awtomatig pan fydd y ddogfen yn cael ei mynegeio:
# ΠΠΎΠ»ΡΡΠΈΠΌ mapping Π²ΡΠ΅Ρ
ΡΠΈΠΏΠΎΠ² ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/_mapping?pretty"Yn ymateb y gweinydd, ychwanegais werthoedd meysydd y ddogfen fynegeiedig yn y sylwadau:
{
"blog" : {
"mappings" : {
"post" : {
"properties" : {
/* "content": "<p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΠΊΠΎΡΡΡ<p>", */
"content" : {
"type" : "string"
},
/* "published_at": "2014-09-12T20:44:42+00:00" */
"published_at" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
/* "tags": ["ΠΊΠΎΡΡΡΠ°", "ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ"] */
"tags" : {
"type" : "string"
},
/* "title": "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°" */
"title" : {
"type" : "string"
}
}
}
}
}
}Mae'n werth nodi nad yw ES yn gwahaniaethu rhwng un gwerth ac amrywiaeth o werthoedd. Er enghraifft, mae'r maes teitl yn syml yn cynnwys teitl, ac mae'r maes tagiau yn cynnwys amrywiaeth o linynnau, er eu bod yn cael eu cynrychioli yn yr un modd wrth fapio.
Byddwn yn siarad mwy am fapio yn nes ymlaen.
Ceisiadau
Adalw dogfen trwy ei ID:
# ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Ρ id 1 ΡΠΈΠΏΠ° post ΠΈΠ· ΠΈΠ½Π΄Π΅ΠΊΡΠ° blog
curl -XGET "$ES_URL/blog/post/1?pretty"{
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"title" : "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°",
"content" : "<p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΠΊΠΎΡΡΡ<p>",
"tags" : [ "ΠΊΠΎΡΡΡΠ°", "ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ" ],
"published_at" : "2014-09-12T20:44:42+00:00"
}
}Ymddangosodd allweddi newydd yn yr ymateb: _version ΠΈ _source. Yn gyffredinol, mae pob allwedd yn dechrau gyda _ yn cael eu dosbarthu fel swyddogol.
Allwedd _version yn dangos fersiwn y ddogfen. Mae ei angen er mwyn i'r mecanwaith cloi optimistaidd weithio. Er enghraifft, rydym am newid dogfen sydd Γ’ fersiwn 1. Rydym yn cyflwyno'r ddogfen wedi'i newid ac yn nodi mai golygiad o ddogfen gyda fersiwn 1 yw hon. Os yw rhywun arall hefyd wedi golygu dogfen gyda fersiwn 1 ac wedi cyflwyno newidiadau o'n blaenau, yna Ni fydd ES yn derbyn ein newidiadau, oherwydd mae'n storio'r ddogfen gyda fersiwn 2.
Allwedd _source yn cynnwys y ddogfen a fynegwyd gennym. Nid yw ES yn defnyddio'r gwerth hwn ar gyfer gweithrediadau chwilio oherwydd Defnyddir mynegeion ar gyfer chwilio. Er mwyn arbed lle, mae ES yn storio dogfen ffynhonnell gywasgedig. Os mai dim ond yr id sydd ei angen arnom, ac nid y ddogfen ffynhonnell gyfan, yna gallwn analluogi storio ffynhonnell.
Os nad oes angen gwybodaeth ychwanegol arnom, dim ond cynnwys _source y gallwn ei gael:
curl -XGET "$ES_URL/blog/post/1/_source?pretty"{
"title" : "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°",
"content" : "<p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΠΊΠΎΡΡΡ<p>",
"tags" : [ "ΠΊΠΎΡΡΡΠ°", "ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ" ],
"published_at" : "2014-09-12T20:44:42+00:00"
}
Gallwch hefyd ddewis rhai meysydd yn unig:
# ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅ title
curl -XGET "$ES_URL/blog/post/1?_source=title&pretty"{
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"title" : "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°"
}
}Gadewch i ni fynegeio ychydig mwy o bostiadau a rhedeg ymholiadau mwy cymhleth.
curl -XPUT "$ES_URL/blog/post/2" -d'
{
"title": "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΡΠ΅Π½ΠΊΠΈ",
"content": "<p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΡΠ΅Π½ΠΊΠΎΠ²<p>",
"tags": [
"ΡΠ΅Π½ΠΊΠΈ",
"ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ"
],
"published_at": "2014-08-12T20:44:42+00:00"
}'curl -XPUT "$ES_URL/blog/post/3" -d'
{
"title": "ΠΠ°ΠΊ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΊΠΎΡΠ΅Π½ΠΎΠΊ",
"content": "<p>ΠΡΡΠ΅ΡΠ°Π·Π΄ΠΈΡΠ°ΡΡΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ Π±Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ΅Π½ΠΊΠ° Ρ ΡΠ»ΠΈΡΡ<p>",
"tags": [
"ΠΊΠΎΡΡΡΠ°"
],
"published_at": "2014-07-21T20:44:42+00:00"
}'Trefnu
# Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΡΡ ΠΏΠΎ Π΄Π°ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΠΏΠΎΠ»Ρ title ΠΈ published_at
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"size": 1,
"_source": ["title", "published_at"],
"sort": [{"published_at": "desc"}]
}'{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : null,
"hits" : [ {
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_score" : null,
"_source" : {
"title" : "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°",
"published_at" : "2014-09-12T20:44:42+00:00"
},
"sort" : [ 1410554682000 ]
} ]
}
}Dewison ni'r post olaf. size cyfyngu ar nifer y dogfennau i'w cyhoeddi. total yn dangos cyfanswm nifer y dogfennau sy'n cyfateb i'r cais. sort yn yr allbwn yn cynnwys amrywiaeth o gyfanrifau ar gyfer didoli yn cael ei berfformio. Y rhai. troswyd y dyddiad yn gyfanrif. Mae rhagor o wybodaeth am ddidoli ar gael yn .
Hidlau ac ymholiadau
ES gan nad yw fersiwn 2 yn gwahaniaethu rhwng hidlwyr ac ymholiadau, yn lle hynny .
Mae cyd-destun ymholiad yn wahanol i gyd-destun hidlydd gan fod yr ymholiad yn cynhyrchu _score ac nid yw wedi'i storio. Byddaf yn dangos i chi beth yw _score yn ddiweddarach.
Hidlo yn Γ΄l dyddiad
Rydym yn defnyddio'r cais yng nghyd-destun hidlydd:
# ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΡΡΡ, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΠ΅ 1ΠΎΠ³ΠΎ ΡΠ΅Π½ΡΡΠ±ΡΡ ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΆΠ΅
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"filter": {
"range": {
"published_at": { "gte": "2014-09-01" }
}
}
}'Hidlo yn Γ΄l tagiau
Rydym yn defnyddio i chwilio am ddulliau adnabod dogfennau sy'n cynnwys gair penodol:
# Π½Π°ΠΉΠ΄Π΅ΠΌ Π²ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, Π² ΠΏΠΎΠ»Π΅ tags ΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ 'ΠΊΠΎΡΡΡΠ°'
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"_source": [
"title",
"tags"
],
"filter": {
"term": {
"tags": "ΠΊΠΎΡΡΡΠ°"
}
}
}'{
"took" : 9,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 1.0,
"hits" : [ {
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"title" : "ΠΠ΅ΡΠ΅Π»ΡΠ΅ ΠΊΠΎΡΡΡΠ°",
"tags" : [ "ΠΊΠΎΡΡΡΠ°", "ΡΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ" ]
}
}, {
"_index" : "blog",
"_type" : "post",
"_id" : "3",
"_score" : 1.0,
"_source" : {
"title" : "ΠΠ°ΠΊ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΊΠΎΡΠ΅Π½ΠΎΠΊ",
"tags" : [ "ΠΊΠΎΡΡΡΠ°" ]
}
} ]
}
}Chwiliad testun llawn
Mae tair o'n dogfennau yn cynnwys y canlynol yn y maes cynnwys:
<p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΠΊΠΎΡΡΡ<p><p>Π‘ΠΌΠ΅ΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ ΡΠ΅Π½ΠΊΠΎΠ²<p><p>ΠΡΡΠ΅ΡΠ°Π·Π΄ΠΈΡΠ°ΡΡΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΡΠΎ Π±Π΅Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ΅Π½ΠΊΠ° Ρ ΡΠ»ΠΈΡΡ<p>
Rydym yn defnyddio i chwilio am ddulliau adnabod dogfennau sy'n cynnwys gair penodol:
# source: false ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ _source Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
"_source": false,
"query": {
"match": {
"content": "ΠΈΡΡΠΎΡΠΈΡ"
}
}
}'{
"took" : 13,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 3,
"max_score" : 0.11506981,
"hits" : [ {
"_index" : "blog",
"_type" : "post",
"_id" : "2",
"_score" : 0.11506981
}, {
"_index" : "blog",
"_type" : "post",
"_id" : "1",
"_score" : 0.11506981
}, {
"_index" : "blog",
"_type" : "post",
"_id" : "3",
"_score" : 0.095891505
} ]
}
}Fodd bynnag, os chwiliwn am βstraeonβ yn y maes cynnwys, ni fyddwn yn dod o hyd i unrhyw beth, oherwydd Dim ond y geiriau gwreiddiol sydd yn y mynegai, nid eu coesynnau. Er mwyn gwneud chwiliad o ansawdd uchel, mae angen i chi ffurfweddu'r dadansoddwr.
Maes _score sioeau . Os gweithredir y cais mewn cyd-destun hidlydd, yna bydd y gwerth _score bob amser yn hafal i 1, sy'n golygu cyfatebiaeth gyflawn i'r hidlydd.
Dadansoddwyr
sydd eu hangen i drosi'r testun ffynhonnell yn set o docynnau.
Mae dadansoddwyr yn cynnwys un a sawl dewisol . Gall Tokenizer gael ei ragflaenu gan sawl un . Mae tocynwyr yn torri'r llinyn ffynhonnell yn docynnau, fel bylchau a nodau atalnodi. Gall TokenFilter newid tocynnau, dileu neu ychwanegu rhai newydd, er enghraifft, gadael coesyn y gair yn unig, tynnu arddodiaid, ychwanegu cyfystyron. CharFilter - yn newid y llinyn ffynhonnell gyfan, er enghraifft, yn torri allan tagiau html.
Mae gan ES sawl un . Er enghraifft, dadansoddwr .
Gadewch i ni gymryd mantais a gadewch i ni weld sut mae'r dadansoddwyr safonol a Rwsiaidd yn trawsnewid y llinyn βStraeon doniol am gathod bachβ:
# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ 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"{
"tokens" : [ {
"token" : "Π²Π΅ΡΠ΅Π»ΡΠ΅",
"start_offset" : 0,
"end_offset" : 7,
"type" : "<ALPHANUM>",
"position" : 0
}, {
"token" : "ΠΈΡΡΠΎΡΠΈΠΈ",
"start_offset" : 8,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "ΠΏΡΠΎ",
"start_offset" : 16,
"end_offset" : 19,
"type" : "<ALPHANUM>",
"position" : 2
}, {
"token" : "ΠΊΠΎΡΡΡ",
"start_offset" : 20,
"end_offset" : 25,
"type" : "<ALPHANUM>",
"position" : 3
} ]
}# ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ russian
curl -XGET "$ES_URL/_analyze?pretty&analyzer=russian&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"{
"tokens" : [ {
"token" : "Π²Π΅ΡΠ΅Π»",
"start_offset" : 0,
"end_offset" : 7,
"type" : "<ALPHANUM>",
"position" : 0
}, {
"token" : "ΠΈΡΡΠΎΡ",
"start_offset" : 8,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 1
}, {
"token" : "ΠΊΠΎΡ",
"start_offset" : 20,
"end_offset" : 25,
"type" : "<ALPHANUM>",
"position" : 3
} ]
}Holltodd y dadansoddwr safonol y llinyn Γ’ bylchau a throsi popeth i lythrennau bach, tynnodd y dadansoddwr Rwsiaidd eiriau dibwys, ei drosi i briflythrennau a gadael coesyn y geiriau.
Gadewch i ni weld pa Tokenizer, TokenFilters, CharFilters y mae'r dadansoddwr Rwsia yn eu defnyddio:
{
"filter": {
"russian_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"russian_keywords": {
"type": "keyword_marker",
"keywords": []
},
"russian_stemmer": {
"type": "stemmer",
"language": "russian"
}
},
"analyzer": {
"russian": {
"tokenizer": "standard",
/* TokenFilters */
"filter": [
"lowercase",
"russian_stop",
"russian_keywords",
"russian_stemmer"
]
/* CharFilters ΠΎΡΡΡΡΡΡΠ²ΡΡΡ */
}
}
}Gadewch i ni ddisgrifio ein dadansoddwr yn seiliedig ar Rwsieg, a fydd yn torri allan tagiau html. Gadewch i ni ei alw'n ddiofyn, oherwydd bydd dadansoddwr gyda'r enw hwn yn cael ei ddefnyddio yn ddiofyn.
{
"filter": {
"ru_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"ru_stemmer": {
"type": "stemmer",
"language": "russian"
}
},
"analyzer": {
"default": {
/* Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ html ΡΠ΅Π³ΠΎΠ² */
"char_filter": ["html_strip"],
"tokenizer": "standard",
"filter": [
"lowercase",
"ru_stop",
"ru_stemmer"
]
}
}
}Yn gyntaf, bydd yr holl dagiau HTML yn cael eu tynnu o'r llinyn ffynhonnell, yna bydd y safon tokenizer yn ei rannu'n docynnau, bydd y tocynnau canlyniadol yn symud i lythrennau bach, bydd geiriau di-nod yn cael eu tynnu, a bydd y tocynnau sy'n weddill yn aros yn goesyn y gair.
Creu mynegai
Uchod fe wnaethom ddisgrifio'r dadansoddwr rhagosodedig. Bydd yn berthnasol i bob maes llinyn. Mae ein post yn cynnwys amrywiaeth o dagiau, felly bydd y tagiau hefyd yn cael eu prosesu gan y dadansoddwr. Achos Rydyn ni'n chwilio am bostiadau sy'n cyfateb yn union i dag, yna mae angen i ni analluogi dadansoddiad ar gyfer y maes tagiau.
Gadewch i ni greu blog mynegai2 gyda dadansoddwr a mapio, lle mae'r dadansoddiad o'r maes tagiau wedi'i analluogi:
curl -XPOST "$ES_URL/blog2" -d'
{
"settings": {
"analysis": {
"filter": {
"ru_stop": {
"type": "stop",
"stopwords": "_russian_"
},
"ru_stemmer": {
"type": "stemmer",
"language": "russian"
}
},
"analyzer": {
"default": {
"char_filter": [
"html_strip"
],
"tokenizer": "standard",
"filter": [
"lowercase",
"ru_stop",
"ru_stemmer"
]
}
}
}
},
"mappings": {
"post": {
"properties": {
"content": {
"type": "string"
},
"published_at": {
"type": "date"
},
"tags": {
"type": "string",
"index": "not_analyzed"
},
"title": {
"type": "string"
}
}
}
}
}'Gadewch i ni ychwanegu'r un 3 neges i'r mynegai hwn (blog2). Byddaf yn hepgor y broses hon oherwydd... mae'n debyg i ychwanegu dogfennau at fynegai'r blogiau.
Chwiliad testun llawn gyda chefnogaeth mynegiant
Gadewch i ni edrych ar fath arall o gais:
# Π½Π°ΠΉΠ΄Π΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ»ΠΎΠ²ΠΎ 'ΠΈΡΡΠΎΡΠΈΠΈ'
# 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"
]
}
}
}'Achos Rydym yn defnyddio dadansoddwr gyda choesyn Rwsieg, yna bydd y cais hwn yn dychwelyd yr holl ddogfennau, er eu bod yn cynnwys y gair 'hanes' yn unig.
Gall y cais gynnwys nodau arbennig, er enghraifft:
""fried eggs" +(eggplant | potato) -frittata"Cystrawen cais:
+ 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 ΠΏΠΎΡΡΠ° ΠΏΡΠΎ ΠΊΠΎΡΠΈΠΊΠΎΠ²cyfeiriadau
PS
Os oes gennych ddiddordeb mewn gwersi erthygl o'r fath, os oes gennych syniadau ar gyfer erthyglau newydd neu os oes gennych gynigion ar gyfer cydweithredu, byddaf yn falch o dderbyn neges bersonol neu drwy'r post m.kuzmin+habr@darkleaf.ru.
Ffynhonnell: hab.com
