احسان رضایی

یک توسعه دهنده، شاید هم نه.


جستجوی ساده یا basic match در elasticsearch

در elasticsearch , / تاریخ ارسال 1398/10/07 - 20:11 / 0 نظر / 25 بازدید / آخرین ویرایش 1398/11/03 - 00:07

اولین مطلب در مورد کوئری های جستجو در elasticsearch رو با ساده ترین روش یا به عبارتی basic match شروع میکنم. دو روش برای match کردن یا جستجو وجود داره. روش اول از طریق پارامتر داخل  url هست و روش دوم ارسال query در body درخواست/request.

توی روش اول هیچ کنترلی روی خروجی الستیک ندارین ولی خب کار راه انداره. اما برعکس، با روش دوم میتونید فیلد های جستجو و موارد دیگه ای که بعدا بیشتر در موردش مینویسم رو مشخص یا تنظیم کنید.

مثال: جستجوی guide در ایندکس developit_ir. کلمه guide در تمام فیلد ها جستجو میشه.

GET /developit_ir/_search?q=guide

نمونه خروجی:

"hits": [
{
  "_index": "developit_ir",
  "_type": "_doc",
  "_id": "1",
  "_score": 3.541,
  "_source": {
    "title": "developit.ir",
    "authors": [
      "ehsan rezaei"
    ],
    "summary": "elasticsearch guide :)",
    "publish_date": "2020-01-01"
  }
}
]

توی روش دوم میتونید جستجوی مورد نظرتون رو در قالب json داخل body درخواست/request ارسال کنید. مثل نمونه زیر. توی این مثال من فیلد ها رو هم مشخص کردم.

{
  "query": {
    "multi_match": {
      "query": "guide",
      "fields": [
        "title",
        "authors",
        "summary"
      ]
    }
  }
}

multi_match دقیقا مشابه match عمل میکنه با این تفاوت که برای جستجو در چندین فیلد مثل نمونه بالا استفاده میشه. پس اگر تصمیم دارین تنها در یک فیلد جستجو کنید بهتره از match استفاده کنید که سربار کمتری هم داره.

match اسناد یا داکیومنت هایی که با رشته مورد نظر شما مطابقت داردُ برمیگردونه.

GET /developit_ir/_search
{
    "query": {
        "match" : {
            "summary" : {
                "query" : "guide"
            }
        }
    }

پیشنهاد

ارسال نظر