Tüm Ürünler
Search
Belge Merkezi

:Use synonyms

Son Güncelleme:Oct 04, 2026

Alibaba Cloud Elasticsearch, arama için eş anlamlıları yapılandırmak üzere iki yöntem destekler: bir eş anlamlı sözlük dosyasını kümeye yüklemek veya dizin ayarlarında eş anlamlıları satır içi olarak tanımlamak. Her iki yaklaşım da özel bir çözümleyicideki eş anlamlı belirteç filtresini kullanır.

Bu konudaki tüm komutları Kibana konsolundan çalıştırın. Erişim talimatları için bkz. Kibana konsolunda oturum açma.

Yöntem 1: Eş anlamlı sözlük dosyası kullanma

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

Aşağıdaki örneklerde, begin, start girişini içeren analysis/aliyun_synonyms.txt dosyası kullanılmaktadır.

Adım 1: Dizin oluşturma

Yüklenen eş anlamlı dosyasına başvuran özel bir çözümleyici ile bir dizin oluşturun:

PUT /aliyun-index-test
{
  "settings": {
    "index":{
      "analysis": {
          "analyzer": {
            "by_smart": {
              "type": "custom",
              "tokenizer": "ik_smart",
              "filter": ["by_tfr","by_sfr"],
              "char_filter": ["by_cfr"]
            },
            "by_max_word": {
              "type": "custom",
              "tokenizer": "ik_max_word",
              "filter": ["by_tfr","by_sfr"],
              "char_filter": ["by_cfr"]
            }
         },
         "filter": {
            "by_tfr": {
              "type": "stop",
              "stopwords": [" "]
              },
            "by_sfr": {
              "type": "synonym",
              "synonyms_path": "analysis/aliyun_synonyms.txt"
              }
           },
           "char_filter": {
             "by_cfr": {
               "type": "mapping",
               "mappings": ["| => |"]
             }
           }
       }
     }
   }
}

by_sfr filtresi, eş anlamlıları yüklenen sözlük dosyasından alır. by_max_word çözümleyicisi dizine ekleme için, by_smart ise arama sorguları için kullanılır.

Adım 2: Eşlemeyi yapılandırma

title alanını özel çözümleyicileri kullanacak şekilde eşleyin. Komut, küme sürümüne göre farklılık gösterir.

  • Elasticsearch 7.0 veya sonraki sürümler:

    PUT /aliyun-index-test/_mapping/
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "by_max_word",
       "search_analyzer": "by_smart"
     }
    }
    }
  • Elasticsearch 7.0'dan önceki sürümler:

    PUT /aliyun-index-test/_mapping/doc
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "by_max_word",
       "search_analyzer": "by_smart"
     }
    }
    }
Önemli

Açık kaynaklı Elasticsearch 7.0 ve sonraki sürümlerde eşleme türleri kullanımdan kaldırılmıştır ve _doc otomatik olarak kullanılır. Yolda bir eşleme türü belirtmeyin. Belirtirseniz hata döndürülür.

Adım 3: Çözümleyiciyi doğrulama

Bir test terimini analiz ederek eş anlamlı filtrenin çalıştığını onaylayın:

GET /aliyun-index-test/_analyze
{
"analyzer": "by_smart",
"text":"begin"
}

Yanıt, aynı konumda hem begin (tür ENGLISH) hem de start (tür SYNONYM) içermelidir:

{
"tokens": [
 {
   "token": "begin",
   "start_offset": 0,
   "end_offset": 5,
   "type": "ENGLISH",
   "position": 0
 },
 {
   "token": "start",
   "start_offset": 0,
   "end_offset": 5,
   "type": "SYNONYM",
   "position": 0
 }
]
}

Adım 4: Test belgeleri ekleme

Farklı ancak eş anlamlı terimler içeren iki belgeyi dizine ekleyin.

  • Elasticsearch 7.0 veya sonraki sürümler:

    PUT /aliyun-index-test/_doc/1
    {
    "title": "Shall I begin?"
    }
    PUT /aliyun-index-test/_doc/2
    {
    "title": "I start work at nine."
    }
  • Elasticsearch 7.0'dan önceki sürümler:

    PUT /aliyun-index-test/doc/1
    {
    "title": "Shall I begin?"
    }
    PUT /aliyun-index-test/doc/2
    {
    "title": "I start work at nine."
    }

Adım 5: Eş anlamlı aramasını test etme

begin için arama yapın ve start içeren belge dahil olmak üzere her iki belgenin de döndürüldüğünü doğrulayın:

GET /aliyun-index-test/_search
{
 "query" : { "match" : { "title" : "begin" }},
 "highlight" : {
     "pre_tags" : ["<red>", "<bule>"],
     "post_tags" : ["</red>", "</bule>"],
     "fields" : {
         "title" : {}
     }
 }
}

Başarılı bir yanıt, eşleşen terimler vurgulanmış olarak her iki belgeyi de döndürür:

{
"took": 11,
"timed_out": false,
"_shards": {
 "total": 5,
 "successful": 5,
 "failed": 0
},
"hits": {
 "total": 2,
 "max_score": 0.41048482,
 "hits": [
   {
     "_index": "aliyun-index-test",
     "_type": "doc",
     "_id": "2",
     "_score": 0.41048482,
     "_source": {
       "title": "I start work at nine."
     },
     "highlight": {
       "title": [
         "I <red>start</red> work at nine."
       ]
     }
   },
   {
     "_index": "aliyun-index-test",
     "_type": "doc",
     "_id": "1",
     "_score": 0.39556286,
     "_source": {
       "title": "Shall I begin?"
     },
     "highlight": {
       "title": [
         "Shall I <red>begin</red>?"
       ]
     }
   }
 ]
}
}

begin ve start eş anlamlı olarak tanımlandığından her iki belge de eşleşir.

Yöntem 2: Satır içi eş anlamlıları tanımlama

Bu yöntem, synonyms parametresini kullanarak eş anlamlı kurallarını doğrudan dizin settings bölümüne yerleştirir. Sık güncelleme gerektirmeyen basit ve kararlı eş anlamlı kümeleri için bu yaklaşımı kullanın.

Adım 1: Satır içi eş anlamlılarla dizin oluşturma

PUT /my_index
{
 "settings": {
     "analysis": {
         "analyzer": {
             "my_synonyms": {
                 "filter": [
                     "lowercase",
                     "my_synonym_filter"
                 ],
                 "tokenizer": "ik_smart"
             }
         },
         "filter": {
             "my_synonym_filter": {
                 "synonyms": [
                     "begin,start"
                 ],
                 "type": "synonym"
             }
         }
     }
 }
}

Bu yapılandırma aşağıdaki işlemleri gerçekleştirir:

  1. Satır içi eş anlamlı kuralı begin,start ile bir eş anlamlı filtresi (my_synonym_filter) tanımlar.

  2. ik_smart belirteçleyicisini kullanarak my_synonyms çözümleyicisini oluşturur.

  3. Belirteçlemeden sonra, tüm belirteçlere lowercase ve my_synonym_filter uygular.

Adım 2: Eşlemeyi yapılandırma

  • Elasticsearch 7.0 veya sonraki sürümler:

    PUT /my_index/_mapping/
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "my_synonyms"
     }
    }
    }
  • Elasticsearch 7.0'dan önceki sürümler:

    PUT /my_index/_mapping/doc
    {
    "properties": {
     "title": {
       "type": "text",
       "analyzer": "my_synonyms"
     }
    }
    }
Önemli

Açık kaynaklı Elasticsearch 7.0 ve sonraki sürümlerde eşleme türleri kullanımdan kaldırılmıştır ve _doc otomatik olarak kullanılır. Yolda bir eşleme türü belirtmeyin. Belirtirseniz hata döndürülür.

Adım 3: Çözümleyiciyi doğrulama

GET /my_index/_analyze
{
 "analyzer":"my_synonyms",
 "text":"Shall I begin?"
}

Yanıt, aynı konumda begin (tür ENGLISH) ve start (tür SYNONYM) içerir; bu durum eş anlamlı filtrenin etkin olduğunu doğrular:

{
"tokens": [
 {
   "token": "shall",
   "start_offset": 0,
   "end_offset": 5,
   "type": "ENGLISH",
   "position": 0
 },
 {
   "token": "i",
   "start_offset": 6,
   "end_offset": 7,
   "type": "ENGLISH",
   "position": 1
 },
 {
   "token": "begin",
   "start_offset": 8,
   "end_offset": 13,
   "type": "ENGLISH",
   "position": 2
 },
 {
   "token": "start",
   "start_offset": 8,
   "end_offset": 13,
   "type": "SYNONYM",
   "position": 2
 }
]
}

Adım 4: Test belgeleri ekleme

  • Elasticsearch 7.0 veya sonraki sürümler:

    PUT /my_index/_doc/1
    {
    "title": "Shall I begin?"
    }
    PUT /my_index/_doc/2
    {
    "title": "I start work at nine."
    }
  • Elasticsearch 7.0'dan önceki sürümler:

    PUT /my_index/doc/1
    {
    "title": "Shall I begin?"
    }
    PUT /my_index/doc/2
    {
    "title": "I start work at nine."
    }

Adım 5: Eş anlamlı aramasını test etme

GET /my_index/_search
{
"query" : { "match" : { "title" : "begin" }},
"highlight" : {
  "pre_tags" : ["<red>", "<bule>"],
  "post_tags" : ["</red>", "</bule>"],
  "fields" : {
      "title" : {}
  }
}
}

Yanıt her iki belgeyi de döndürür:

{
"took": 11,
"timed_out": false,
"_shards": {
 "total": 5,
 "successful": 5,
 "failed": 0
},
"hits": {
 "total": 2,
 "max_score": 0.41913947,
 "hits": [
   {
     "_index": "my_index",
     "_type": "doc",
     "_id": "2",
     "_score": 0.41913947,
     "_source": {
       "title": "I start work at nine."
     },
     "highlight": {
       "title": [
         "I <red>start</red> work at nine."
       ]
     }
   },
   {
     "_index": "my_index",
     "_type": "doc",
     "_id": "1",
     "_score": 0.39556286,
     "_source": {
       "title": "Shall I begin?"
     },
     "highlight": {
       "title": [
         "Shall I <red>begin</red>?"
       ]
     }
   }
 ]
}
}