ඉලාස්ටික් සෙවුම් මූලික කරුණු

Elasticsearch යනු Lucene භාවිතා කර ජාවා භාෂාවෙන් ලියන ලද json rest api සහිත සෙවුම් යන්ත්‍රයකි. මෙම එන්ජිමේ සියලුම වාසි පිළිබඳ විස්තරයක් ලබා ගත හැකිය නිල වෙබ් අඩවිය. පහත දැක්වෙන දේ තුළ අපි Elasticsearch ES ලෙස හඳුන්වනු ඇත.

ලේඛන දත්ත ගබඩාවක සංකීර්ණ සෙවීම් සඳහා සමාන එන්ජින් භාවිතා වේ. උදාහරණයක් ලෙස, භාෂාවේ රූප විද්‍යාව සැලකිල්ලට ගනිමින් සෙවීම හෝ භූ ඛණ්ඩාංක මගින් සෙවීම.

මෙම ලිපියෙන් මම බ්ලොග් සටහන් සුචිගත කිරීමේ උදාහරණය භාවිතා කරමින් ES හි මූලික කරුණු ගැන කතා කරමි. ලේඛන පෙරීම, වර්ග කිරීම සහ සෙවුම් කරන ආකාරය මම ඔබට පෙන්වන්නම්.

මෙහෙයුම් පද්ධතිය මත රඳා නොසිටීම සඳහා, මම CURL භාවිතයෙන් ES වෙත සියලු ඉල්ලීම් කරන්නෙමි. ගූගල් ක්‍රෝම් සඳහා ප්ලගිනයක් ද ඇත හැඟීමක්.

පාඨයෙහි ලේඛන සහ වෙනත් මූලාශ්‍ර වෙත සබැඳි අඩංගු වේ. අවසානයේ ලේඛන වෙත ඉක්මන් ප්‍රවේශය සඳහා සබැඳි ඇත. නුහුරු පදවල අර්ථ දැක්වීම් සොයාගත හැකිය පදමාලා.

ES ස්ථාපනය කිරීම

මෙය සිදු කිරීම සඳහා, අපට මුලින්ම ජාවා අවශ්ය වේ. සංවර්ධකයින් නිර්දේශ කරන්න Java 8 යාවත්කාලීන 20 හෝ Java 7 යාවත්කාලීන 55 ට වඩා අලුත් Java අනුවාද ස්ථාපනය කරන්න.

ES බෙදාහැරීම ලබා ගත හැකිය සංවර්ධක වෙබ් අඩවිය. සංරක්ෂිතය ඉවත් කිරීමෙන් පසු ඔබ ධාවනය කළ යුතුය bin/elasticsearch. එසේම ලබා ගත හැක apt සහ yum සඳහා පැකේජ. ඇත ඩොකර් සඳහා නිල රූපය. ස්ථාපනය ගැන වැඩි විස්තර.

ස්ථාපනය සහ දියත් කිරීමෙන් පසුව, අපි ක්රියාකාරීත්වය පරීක්ෂා කරමු:

# для удобства запомним адрес в переменную
#export ES_URL=$(docker-machine ip dev):9200
export ES_URL=localhost:9200

curl -X GET $ES_URL

අපට මෙවැනි දෙයක් ලැබෙනු ඇත:

{
  "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"
}

සුචිගත කිරීම

අපි 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"
}'

සේවාදායක ප්‍රතිචාරය:

{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : false
}

ES ස්වයංක්‍රීයව සාදන ලදී දර්ශකය බ්ලොග් සහ වර්ගය තැපැල්. අපට කොන්දේසි සහිත සාදෘශ්‍යයක් ඇඳිය ​​හැකිය: දර්ශකයක් යනු දත්ත සමුදායක් වන අතර වර්ගයක් මෙම දත්ත ගබඩාවේ වගුවකි. සෑම වර්ගයකටම තමන්ගේම යෝජනා ක්රමයක් ඇත - සිතියම් ගත, හරියට සම්බන්ධක වගුවක් වගේ. ලේඛනය සුචිගත කළ විට සිතියම්කරණය ස්වයංක්‍රීයව ජනනය වේ:

# Получим mapping всех типов индекса blog
curl -XGET "$ES_URL/blog/_mapping?pretty"

සේවාදායක ප්‍රතිචාරයේදී, මම අදහස් දැක්වීමේදී සුචිගත කළ ලේඛනයේ ක්ෂේත්‍රවල අගයන් එකතු කළෙමි:

{
  "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"
          }
        }
      }
    }
  }
}

ES තනි අගයක් සහ අගයන් මාලාවක් අතර වෙනස හඳුනා නොගන්නා බව සඳහන් කිරීම වටී. උදාහරණයක් ලෙස, මාතෘකා ක්ෂේත්‍රයේ හුදෙක් මාතෘකාවක් අඩංගු වන අතර, ටැග් ක්ෂේත්‍රයේ තන්තු මාලාවක් අඩංගු වේ, නමුත් ඒවා සිතියම්ගත කිරීමේදී එකම ආකාරයෙන් නිරූපණය කෙරේ.
සිතියම්කරණය ගැන අපි පසුව කතා කරමු.

ඉල්ලීම්

ලේඛනයක් එහි 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"
  }
}

ප්‍රතිචාරයේ නව යතුරු දර්ශනය විය: _version и _source. පොදුවේ ගත් කල, ආරම්භ වන සියලුම යතුරු _ නිල වශයෙන් වර්ගීකරණය කර ඇත.

ප්රධාන _version ලේඛන අනුවාදය පෙන්වයි. ශුභවාදී අගුලු දැමීමේ යාන්ත්‍රණය ක්‍රියා කිරීම සඳහා එය අවශ්‍ය වේ. උදාහරණයක් ලෙස, අපට 1 අනුවාදය ඇති ලේඛනයක් වෙනස් කිරීමට අවශ්‍යයි. අපි වෙනස් කළ ලේඛනය ඉදිරිපත් කර මෙය 1 අනුවාදය සහිත ලේඛනයක සංස්කරණයක් බව හඟවන්නෙමු. වෙනත් අයෙකු ද 1 අනුවාදය සහිත ලේඛනයක් සංස්කරණය කර අප ඉදිරියේ වෙනස්කම් ඉදිරිපත් කළේ නම්, එවිට ES අපගේ වෙනස්කම් පිළිගන්නේ නැත, මන්ද එය ලේඛනය 2 අනුවාදය සමඟ ගබඩා කරයි.

ප්රධාන _source අප සුචිගත කළ ලේඛනය අඩංගු වේ. ES මෙම අගය සෙවුම් මෙහෙයුම් සඳහා භාවිතා නොකරන නිසා සෙවීම සඳහා දර්ශක භාවිතා වේ. ඉඩ ඉතිරි කර ගැනීමට, ES සම්පීඩිත මූලාශ්‍ර ලේඛනයක් ගබඩා කරයි. අපට අවශ්‍ය වන්නේ හැඳුනුම්පත පමණක් නම්, සහ සම්පූර්ණ මූලාශ්‍ර ලේඛනය නොවේ නම්, අපට මූලාශ්‍ර ගබඩාව අක්‍රිය කළ හැක.

අපට අමතර තොරතුරු අවශ්‍ය නැතිනම්, අපට ලබාගත හැක්කේ _source හි අන්තර්ගතය පමණි:

curl -XGET "$ES_URL/blog/post/1/_source?pretty"
{
  "title" : "Веселые котята",
  "content" : "<p>Смешная история про котят<p>",
  "tags" : [ "котята", "смешная история" ],
  "published_at" : "2014-09-12T20:44:42+00:00"
}

ඔබට ඇතැම් ක්ෂේත්‍ර පමණක් තෝරාගත හැක:

# извлечем только поле title
curl -XGET "$ES_URL/blog/post/1?_source=title&pretty"
{
  "_index" : "blog",
  "_type" : "post",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "title" : "Веселые котята"
  }
}

අපි තවත් පළ කිරීම් කිහිපයක් සුචිගත කර වඩාත් සංකීර්ණ විමසුම් ධාවනය කරමු.

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"
}'

වර්ග කිරීම

# найдем последний пост по дате публикации и извлечем поля 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 ]
    } ]
  }
}

අපි අවසාන ලිපිය තෝරා ගත්තෙමු. size නිකුත් කළ යුතු ලේඛන ගණන සීමා කරයි. total ඉල්ලීමට ගැලපෙන මුළු ලේඛන ගණන පෙන්වයි. sort නිමැවුමේ වර්ග කිරීම සිදු කරන පූර්ණ සංඛ්‍යා මාලාවක් අඩංගු වේ. එම. දිනය පූර්ණ සංඛ්‍යාවකට පරිවර්තනය කරන ලදී. වර්ග කිරීම පිළිබඳ වැඩි විස්තර සොයා ගත හැක ලියකියවිලි.

පෙරහන් සහ විමසුම්

ES සිට 2 අනුවාදය පෙරහන් සහ විමසුම් අතර වෙනස හඳුනා නොගනී සන්දර්භය පිළිබඳ සංකල්පය හඳුන්වා දෙනු ලැබේ.
විමසුම් සන්දර්භයක් පෙරහන් සන්දර්භයකින් වෙනස් වන්නේ විමසුම _score ජනනය කරන අතර එය හැඹිලිගත නොවේ. මම ඔබට පසුව පෙන්වන්නම් _ලකුණු මොනවාද කියලා.

දිනය අනුව පෙරහන් කරන්න

අපි ඉල්ලීම භාවිතා කරමු පරාසයක පෙරහන සන්දර්භය තුළ:

# получим посты, опубликованные 1ого сентября или позже
curl -XGET "$ES_URL/blog/post/_search?pretty" -d'
{
  "filter": {
    "range": {
      "published_at": { "gte": "2014-09-01" }
    }
  }
}'

ටැග් අනුව පෙරන්න

අපි පාවිච්චි කරන්නේ වාර විමසුම දී ඇති වචනයක් අඩංගු ලේඛන හැඳුනුම්පත් සෙවීමට:

# найдем все документы, в поле 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" : [ "котята" ]
      }
    } ]
  }
}

සම්පූර්ණ පෙළ සෙවීම

අපගේ ලේඛන තුනක අන්තර්ගත ක්ෂේත්‍රයේ පහත සඳහන් දෑ අඩංගු වේ:

  • <p>Смешная история про котят<p>
  • <p>Смешная история про щенков<p>
  • <p>Душераздирающая история про бедного котенка с улицы<p>

අපි පාවිච්චි කරන්නේ ගැලපුම් විමසුම දී ඇති වචනයක් අඩංගු ලේඛන හැඳුනුම්පත් සෙවීමට:

# 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
    } ]
  }
}

කෙසේ වෙතත්, අපි අන්තර්ගත ක්ෂේත්‍රයේ “කතන්දර” සොයන්නේ නම්, අපට කිසිවක් සොයාගත නොහැක, මන්ද මෙම දර්ශකයේ මුල් වචන පමණක් අඩංගු වේ, ඒවායේ කඳන් නොවේ. උසස් තත්ත්වයේ සෙවීමක් සිදු කිරීම සඳහා, ඔබ විශ්ලේෂකය වින්යාසගත කළ යුතුය.

ක්ෂේත්රයේ _score සංදර්ශන අදාළත්වය. ඉල්ලීම පෙරහන් සන්දර්භය තුළ ක්‍රියාත්මක කරන්නේ නම්, _ස්කෝර් අගය සැමවිටම 1 ට සමාන වේ, එයින් අදහස් වන්නේ පෙරණයට සම්පූර්ණ ගැලපීමයි.

විශ්ලේෂකයින්

විශ්ලේෂකයින් මූලාශ්‍ර පෙළ සංකේත කට්ටලයක් බවට පරිවර්තනය කිරීමට අවශ්‍ය වේ.
විශ්ලේෂක එකකින් සමන්විත වේ ටෝකනයිසර් සහ විකල්ප කිහිපයක් ටෝකන් ෆිල්ටර්. ටෝකනයිසර්ට පෙර කිහිපයක් තිබිය හැක චාර්ෆිල්ටර්ස්. ටෝකනයිසර් විසින් ප්‍රභව තන්තුව හිස්තැන් සහ විරාම ලකුණු වැනි සංකේතවලට බිඳ දමයි. TokenFilter හට ටෝකන වෙනස් කිරීමට, මකා දැමීමට හෝ නව ඒවා එකතු කිරීමට හැකිය, උදාහරණයක් ලෙස, වචනයේ කඳ පමණක් තබන්න, පෙරනිමිති ඉවත් කරන්න, සමාන පද එකතු කරන්න. CharFilter - සම්පූර්ණ මූලාශ්‍ර තන්තුව වෙනස් කරයි, උදාහරණයක් ලෙස, html ටැග් කපා දමයි.

ES කිහිපයක් ඇත සම්මත විශ්ලේෂක. උදාහරණයක් ලෙස, විශ්ලේෂකය රුසියානු.

ප්‍රයෝජනය ගනිමු සම්මත සහ රුසියානු විශ්ලේෂකයින් "පූස් පැටවුන් පිළිබඳ විහිලු කථා" තන්තුව පරිවර්තනය කරන්නේ කෙසේදැයි බලමු:

# используем анализатор 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
  } ]
}

සම්මත විශ්ලේෂකය තන්තුව අවකාශ වලින් බෙදා සියල්ල කුඩා අකුරු බවට පරිවර්තනය කළේය, රුසියානු විශ්ලේෂකය වැදගත් නොවන වචන ඉවත් කර, එය කුඩා අකුරට පරිවර්තනය කර වචනවල කඳෙන් ඉවත් විය.

රුසියානු විශ්ලේෂකය භාවිතා කරන ටෝකනයිසර්, ටෝකන් ෆිල්ටර්ස්, චාර්ෆිල්ටර්ස් මොනවාදැයි බලමු:

{
  "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 отсутствуют */
    }
  }
}

html ටැග් කපා හරින රුසියානු මත පදනම් වූ අපගේ විශ්ලේෂකය විස්තර කරමු. අපි එය පෙරනිමියෙන් කියමු, මන්ද මෙම නම සහිත විශ්ලේෂකය පෙරනිමියෙන් භාවිතා කරනු ඇත.

{
  "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"
      ]
    }
  }
}

පළමුව, සියලුම HTML ටැග් ප්‍රභව තන්තුවෙන් ඉවත් කරනු ලැබේ, පසුව ටෝකනයිසර් ප්‍රමිතිය එය ටෝකන වලට බෙදනු ඇත, ප්‍රතිඵලයක් ලෙස ලැබෙන ටෝකන කුඩා අකුරු වෙත ගෙන යනු ඇත, නොවැදගත් වචන ඉවත් කරනු ලැබේ, සහ ඉතිරි ටෝකන වචනයේ කඳේ පවතිනු ඇත.

දර්ශකයක් නිර්මාණය කිරීම

ඉහත අපි විස්තර කළේ පෙරනිමි විශ්ලේෂකයයි. එය සියලුම තන්තු ක්ෂේත්‍ර සඳහා අදාළ වේ. අපගේ පළ කිරීමෙහි ටැග් මාලාවක් අඩංගු වේ, එබැවින් ටැග් විශ්ලේෂකය විසින් ද සකසනු ලැබේ. නිසා අපි ටැගයකට හරියටම ගැළපීමෙන් පළ කිරීම් සොයන්නෙමු, එවිට අපට ටැග් ක්ෂේත්‍රය සඳහා විශ්ලේෂණය අක්‍රිය කිරීමට අවශ්‍ය වේ.

ටැග් ක්ෂේත්‍රයේ විශ්ලේෂණය අක්‍රිය කර ඇති විශ්ලේෂකයක් සහ සිතියම්කරණයක් සහිත දර්ශක බ්ලොග්2 නිර්මාණය කරමු:

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"
        }
      }
    }
  }
}'

මෙම දර්ශකයට (blog3) එම පෝස්ට් 2ම එකතු කරමු. මම මේ ක්‍රියාවලිය මගහරිනවා මොකද... එය බ්ලොග් දර්ශකයට ලේඛන එකතු කිරීම හා සමාන වේ.

ප්‍රකාශන සහාය ඇතිව සම්පූර්ණ පෙළ සෙවීම

අපි තවත් ඉල්ලීම් වර්ගයක් බලමු:

# найдем документы, в которых встречается слово 'истории'
# 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"
      ]
    }
  }
}'

නිසා අපි රුසියානු ස්ටීමිං සමඟ විශ්ලේෂකයක් භාවිතා කරමින් සිටිමු, එවිට මෙම ඉල්ලීම 'ඉතිහාසය' යන වචනය පමණක් අඩංගු වුවද, සියලුම ලේඛන ආපසු ලබා දෙනු ඇත.

ඉල්ලීමෙහි විශේෂ අක්ෂර අඩංගු විය හැක, උදාහරණයක් ලෙස:

""fried eggs" +(eggplant | potato) -frittata"

වාක්‍ය ඛණ්ඩය ඉල්ලන්න:

+ 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 поста про котиков

යොමු

PS

ඔබ සමාන ලිපි-පාඩම් ගැන උනන්දුවක් දක්වන්නේ නම්, නව ලිපි සඳහා අදහස් තිබේ නම් හෝ සහයෝගීතාවය සඳහා යෝජනා තිබේ නම්, පුද්ගලික පණිවිඩයකින් හෝ විද්‍යුත් තැපෑලෙන් පණිවිඩයක් ලැබීමට මම සතුටු වෙමි. [විද්‍යුත් ආරක්‍ෂිත].

මූලාශ්රය: www.habr.com