Kısmi terim araması ve özel karakterler içeren desenler (kısa çizgi, joker karakter, regex, desenler)

Kısmi terim araması terim parçalarından oluşan sorgulara başvurur; burada terimin tamamı yerine yalnızca başlangıcı, ortası veya sonu olabilir (bazen ön ek, ek veya sonek sorguları olarak da adlandırılır). Kısmi terim araması genellikle sorgu dizesinin parçası olan kısa çizgi, kısa çizgi veya eğik çizgi gibi özel karakterler içeren parçaların birleşimini içerebilir. Yaygın kullanım örnekleri arasında telefon numarasının, URL'nin, kodların veya kısa çizgili bileşik sözcüklerin bölümleri bulunur.

Dizinde aramak istediğiniz metin parçasını temsil eden bir belirteç yoksa kısmi terimler ve özel karakterler sorunlu olabilir. Dizin oluşturmanın sözcük temelli analiz aşamasında (varsayılan standart çözümleyici varsayılarak), özel karakterler atılır, bileşik sözcükler bölünür ve boşluk silinir. Sözcük temelli analiz sırasında değiştirilmiş bir metin parçasını arıyorsanız, eşleşme bulunamadığından sorgu başarısız olur. Bu örneği göz önünde bulundurun: gibi bir telefon numarası ("1", "425", , "703", "6214") gibi +1 (425) 703-6214 bir telefon numarası dizinde mevcut olmadığından sorguda "3-62" gösterilmez.

Çözüm, dizin oluşturma sırasında boşluklar ve gerekirse özel karakterler de dahil olmak üzere tam dizeyi koruyan bir çözümleyici çağırmaktır; böylece sorgu dizenize boşluklar ve karakterler ekleyebilirsiniz. Tam, totokenized dizeye sahip olmak, "ile başlar" veya "ile biter" sorguları için desen eşleştirmeyi etkinleştirir; burada sağladığınız desen sözcük temelli analiz tarafından dönüştürülmeyen bir terime göre değerlendirilebilir.

Çözümlenmiş ve çözümlenmemiş içeriği çağıran arama senaryolarını desteklemeniz gerekiyorsa dizininizde her senaryo için bir tane olmak üzere iki alan oluşturmayı göz önünde bulundurun. Bir alan sözcük temelli analizden geçer. İkinci alan, desen eşleştirme için tam dize belirteçleri yayan bir içerik koruma çözümleyicisi kullanarak bir bozulmamış dize depolar.

Azure AI Search, dizindeki belirteçli terimlerin tamamını tarar ve joker karakter yer tutucu işleçleri (* ve ?) eklemediğiniz veya sorguyu normal ifade olarak biçimlendirmediğiniz sürece kısmi bir terimde eşleşme bulamaz.

Kısmi terimler şu teknikler kullanılarak belirtilir:

  • Normal ifade sorguları Apache Lucene altında geçerli olan herhangi bir normal ifade olabilir.

  • Ön ek eşleştirmesi olan joker karakter işleçleri, bir terimin başlangıcını ve ardından * "Cap'n Jack's Waterfront Inn" veya ? "Gacc Capital" gibi sonek işleçlerini içeren genel olarak search=cap* tanınan bir deseni ifade eder. Ön ek eşleştirme hem basit hem de tam Lucene sorgu söz diziminde desteklenir.

  • Infix ve soneki eşleşen joker karakter, ve ? işleçlerini bir terimin içine veya başına yerleştirir * ve normal ifade söz dizimini gerektirir (burada ifade eğik çizgilerle çevrelenir). Örneğin, sorgu dizesi (search=/.*numeric.*/) sonek ve infix eşleşmeleri olarak "alfasayısal" ve "alfasayısal" üzerindeki sonuçları döndürür.

Normal ifade, joker karakter ve benzer arama için çözümleyiciler sorgu zamanında kullanılmaz. Ayrıştırıcının işleçlerin ve sınırlayıcıların varlığıyla algıladığı bu sorgu formları için sorgu dizesi sözcük temelli analiz olmadan altyapıya geçirilir. Bu sorgu formları için, alanda belirtilen çözümleyici yoksayılır.

Not

Kısmi bir sorgu dizesi URL parçasındaki eğik çizgi gibi karakterler içeriyorsa, kaçış karakterleri eklemeniz gerekebilir. JSON'da eğik çizgi, geriye doğru eğik / çizgiyle \kaçıştır. Bu nedenle, search=/.*microsoft.com\/azure\/.*/ "microsoft.com/azure/" URL parçasının söz dizimidir.

Kısmi/desenli arama sorunlarını çözme

Parçalar, desenler veya özel karakterler üzerinde arama yapmanız gerektiğinde, varsayılan çözümleyiciyi dizindeki tüm dizeyi koruyarak daha basit belirteç oluşturma kuralları altında çalışan bir özel çözümleyici ile geçersiz kılabilirsiniz.

Yaklaşım şöyle görünür:

  1. Dizenin bozulmamış bir sürümünü depolamak için ikinci bir alan tanımlayın (sorgu zamanında çözümlenmiş ve çözümlenmemiş metin istediğinizi varsayarsak)
  2. Belirteçleri doğru ayrıntı düzeyinde yayan çeşitli çözümleyicileri değerlendirin ve seçin
  3. Çözümleyiciyi alana atama
  4. Dizini derleme ve test etme

1 - Ayrılmış alan oluşturma

Çözümleyiciler, terimlerin bir dizinde nasıl belirteç haline getirileceğini belirler. Çözümleyiciler alan bazında atandığından, farklı senaryolar için iyileştirme yapmak üzere dizininizde alanlar oluşturabilirsiniz. Örneğin, birincide normal tam metin aramasını desteklemek için "featureCode" ve "featureCodeRegex" ve ikincisinde gelişmiş desen eşleştirmesi tanımlayabilirsiniz. Her alana atanan çözümleyiciler, her alanın içeriğinin dizinde nasıl belirteç haline getirileceğini belirler.

{
  "name": "featureCode",
  "type": "Edm.String",
  "retrievable": true,
  "searchable": true,
  "analyzer": null
},
{
  "name": "featureCodeRegex",
  "type": "Edm.String",
  "retrievable": true,
  "searchable": true,
  "analyzer": "my_custom_analyzer"
},

2 - Çözümleyici ayarlama

Tam vadeli belirteçler üreten bir çözümleyici seçerken, aşağıdaki çözümleyiciler yaygın seçeneklerdir:

Çözümleyici Davranışlar
dil çözümleyicileri Bileşik sözcüklerde veya dizelerde, ünlü mutasyonlarında ve fiil biçimlerinde kısa çizgileri korur. Sorgu desenleri tireler içeriyorsa, dil çözümleyicisi kullanmak yeterli olabilir.
Anahtar kelime Tüm alanın içeriği tek bir terim olarak belirteç haline getirilir.
Boşluk Yalnızca beyaz boşlukları ayırır. Tire veya diğer karakterleri içeren terimler tek bir belirteç olarak kabul edilir.
özel çözümleyici (önerilir) Özel çözümleyici oluşturmak hem belirteç oluşturucuyu hem de belirteç filtresini belirtmenize olanak tanır. Önceki çözümleyiciler olduğu gibi kullanılmalıdır. Özel çözümleyici, hangi belirteç oluşturucuları ve belirteç filtrelerini kullanacağınızı seçmenizi sağlar.

Önerilen birleşim, küçük harfli belirteç filtresine sahip anahtar sözcük belirtecidir. Yerleşik anahtar sözcük çözümleyicisi tek başına büyük harfli metinleri küçük harfe dönüştürmez ve bu da sorguların başarısız olmasına neden olabilir. Özel çözümleyici, küçük harf belirteci filtresini eklemek için bir mekanizma sağlar.

REST istemcisi kullanarak, belirteçli çıkışı incelemek için Test Çözümleyicisi REST çağrısını ekleyebilirsiniz.

Dizin arama hizmetinde mevcut olmalıdır, ancak boş olabilir. Mevcut bir dizin ve tire veya kısmi terimler içeren bir alan göz önünde bulundurulduğunda, hangi belirteçlerin yayıldığından emin olmak için belirli terimler üzerinde çeşitli çözümleyicileri deneyebilirsiniz.

  1. İlk olarak, standart çözümleyiciyi denetleyerek terimlerin varsayılan olarak nasıl belirteç haline getirildiğine bakın.

    {
    "text": "SVP10-NOR-00",
    "analyzer": "standard"
    }
    
  2. Metnin dizin içinde nasıl belirteç haline getirildiğine bakmak için yanıtı değerlendirin. Her terimin küçük harfle yazıldığına, kısa çizgilerin kaldırıldığına ve alt dizelerin tek tek belirteçlere ayrıldığına dikkat edin. Yalnızca bu belirteçlerle eşleşen sorgular sonuçlarda bu belgeyi döndürür. "10-NOR" içeren bir sorgu başarısız olur.

    {
        "tokens": [
            {
                "token": "svp10",
                "startOffset": 0,
                "endOffset": 5,
                "position": 0
            },
            {
                "token": "nor",
                "startOffset": 6,
                "endOffset": 9,
                "position": 1
            },
            {
                "token": "00",
                "startOffset": 10,
                "endOffset": 12,
                "position": 2
            }
        ]
    }
    
  3. Şimdi veya keyword çözümleyicisini whitespace kullanmak için isteği değiştirin:

    {
    "text": "SVP10-NOR-00",
    "analyzer": "keyword"
    }
    
  4. Bu kez yanıt, dizenin bir parçası olarak korunan tirelerle birlikte büyük harfli tek bir belirteçden oluşur. Bir desende veya "10-NOR" gibi kısmi bir terimde arama yapmanız gerekiyorsa, sorgu altyapısı artık eşleşme bulmak için temele sahiptir.

    {
    
        "tokens": [
            {
                "token": "SVP10-NOR-00",
                "startOffset": 0,
                "endOffset": 12,
                "position": 0
            }
        ]
    }
    

Önemli

Sorgu ağacını oluştururken arama ifadesinde sorgu ayrıştırıcılarının genellikle küçük harf terimleri olduğunu unutmayın. Dizin oluşturma sırasında küçük harf metin girişleri içermeyen bir çözümleyici kullanıyorsanız ve beklenen sonuçları alamıyorsanız, bunun nedeni bu olabilir. Çözüm, aşağıdaki "Özel çözümleyicileri kullanma" bölümünde açıklandığı gibi küçük harfli bir belirteç filtresi eklemektir.

3 - Çözümleyici yapılandırma

Çözümleyicileri değerlendirirken veya belirli bir yapılandırmayla devam ederseniz, alan tanımında çözümleyiciyi belirtmeniz ve yerleşik çözümleyici kullanmıyorsanız çözümleyicinin kendisini yapılandırmanız gerekir. Çözümleyicileri değiştirirken genellikle dizini yeniden oluşturmanız (bırakma, yeniden oluşturma ve yeniden yükleme) gerekir.

Yerleşik çözümleyicileri kullanma

Yerleşik çözümleyiciler, bir alan tanımının özelliğinde analyzer ada göre belirtilebilir ve dizinde ek yapılandırma gerekmez. Aşağıdaki örnek, bir alanda çözümleyiciyi whitespace nasıl ayarlayabileceğinizi gösterir.

Diğer senaryolar ve diğer yerleşik çözümleyiciler hakkında daha fazla bilgi edinmek için bkz . Yerleşik çözümleyiciler.

    {
      "name": "phoneNumber",
      "type": "Edm.String",
      "key": false,
      "retrievable": true,
      "searchable": true,
      "analyzer": "whitespace"
    }

Özel çözümleyicileri kullanma

Özel çözümleyici kullanıyorsanız, bunu dizinde belirteç oluşturucu, belirteç filtresinin kullanıcı tanımlı bir bileşimiyle ve olası yapılandırma ayarlarıyla tanımlayın. Ardından, buna yerleşik çözümleyici gibi bir alan tanımında başvurun.

Amaç tam vadeli belirteç oluşturma olduğunda, anahtar sözcük belirteci ve küçük harf belirteci filtresinden oluşan özel bir çözümleyici önerilir.

  • Anahtar sözcük belirteci, bir alanın tüm içeriği için tek bir belirteç oluşturur.
  • Küçük harfli belirteç filtresi, büyük harfleri küçük harf metne dönüştürür. Sorgu ayrıştırıcıları genellikle büyük harfli metin girişlerini küçük harfle küçük harfe dönüştürür. Küçük harfle boyutlandırma, belirteçli terimlerle girişleri homojen hale getirmektedir.

Aşağıdaki örnekte anahtar sözcük belirteci ve küçük harfli belirteç filtresi sağlayan özel bir çözümleyici gösterilmektedir.

{
"fields": [
  {
  "name": "accountNumber",
  "analyzer":"myCustomAnalyzer",
  "type": "Edm.String",
  "searchable": true,
  "filterable": true,
  "retrievable": true,
  "sortable": false,
  "facetable": false
  }
],

"analyzers": [
  {
  "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
  "name":"myCustomAnalyzer",
  "charFilters":[],
  "tokenizer":"keyword_v2",
  "tokenFilters":["lowercase"]
  }
],
"tokenizers":[],
"charFilters": [],
"tokenFilters": []
}

Not

keyword_v2 Belirteç oluşturucu ve lowercase belirteç filtresi, sistem tarafından bilinir ve varsayılan yapılandırmalarını kullanır. Bu nedenle öncelikle tanımlamanız gerekmeden bunlara ada göre başvurabilirsiniz.

4 - Derleme ve test etme

Senaryonuzu destekleyen çözümleyiciler ve alan tanımlarıyla bir dizin tanımladıktan sonra, kısmi dize sorgularını test edebilmeniz için temsili dizeleri olan belgeleri yükleyin.

Bu makalede açıklanan kısmi terimleri ve özel karakterleri sorgulamak için REST istemcisi kullanın.

Önceki bölümlerde mantık açıklanmıştır. Bu bölüm, çözümünüzü test ederken çağırmanız gereken her API'de adım adım ilerler.

  • Dizini Sil, yeniden oluşturabilmeniz için aynı ada sahip mevcut bir dizini kaldırır.

  • Dizin Oluştur, çözümleyici tanımları ve çözümleyici belirtimi olan alanlar da dahil olmak üzere arama hizmetinizde dizin yapısını oluşturur.

  • Belgeleri Yükle dizininizle aynı yapıya sahip belgeleri ve aranabilir içeriği içeri aktarır. Bu adımdan sonra dizininiz sorgulamaya veya test etmeye hazır olur.

  • Test Çözümleyicisi , Çözümleyici ayarlama bölümünde kullanıma sunulmuştur. Terimlerin nasıl belirteçlendirildiği hakkında bilgi edinmek için çeşitli çözümleyicileri kullanarak dizininizdeki bazı dizeleri test edin.

  • Arama Belgeleri, joker karakter ve normal ifadeler için basit söz dizimi veya tam Lucene söz dizimi kullanarak sorgu isteği oluşturmayı açıklar.

    "+1 (425) 703-6214" üzerinde eşleşme bulmak için "3-6214" sorgusunu sorgulama gibi kısmi terim sorguları için basit söz dizimini kullanabilirsiniz: search=3-6214&queryType=simple.

    "Alfasayısal" ile eşleşme bulmak için "sayı" veya "sayısal" sorgulaması gibi sonek ve sonek sorguları için tam Lucene söz dizimini ve normal ifadeyi kullanın: search=/.*num.*/&queryType=full

Sorgu performansını ayarlama

keyword_v2 belirteci ve küçük harf belirteci filtresini içeren önerilen yapılandırmayı uygularsanız, dizininizdeki mevcut belirteçler üzerinde fazladan belirteç filtresi işlemesi nedeniyle sorgu performansında düşüş olduğunu fark edebilirsiniz.

Aşağıdaki örnek, ön ek eşleşmelerini daha hızlı hale getirmek için bir EdgeNGramTokenFilter ekler. Belirteçler, karakter içeren 2-25 karakter bileşiminde oluşturulur. aşağıda iki ila yedi belirteçten bir örnek ilerleme verilmiştir: MS, MSF, MSFT, MSFT/, MSFT/S, MSFT/SQ, MSFT/SQL.

Ek belirteç oluşturma daha büyük bir dizine neden olur. Daha büyük dizini barındırmak için yeterli kapasiteniz varsa, daha hızlı yanıt süresiyle bu yaklaşım en iyi çözüm olabilir.

{
"fields": [
  {
  "name": "accountNumber",
  "analyzer":"myCustomAnalyzer",
  "type": "Edm.String",
  "searchable": true,
  "filterable": true,
  "retrievable": true,
  "sortable": false,
  "facetable": false
  }
],

"analyzers": [
  {
  "@odata.type":"#Microsoft.Azure.Search.CustomAnalyzer",
  "name":"myCustomAnalyzer",
  "charFilters":[],
  "tokenizer":"keyword_v2",
  "tokenFilters":["lowercase", "my_edgeNGram"]
  }
],
"tokenizers":[],
"charFilters": [],
"tokenFilters": [
  {
  "@odata.type":"#Microsoft.Azure.Search.EdgeNGramTokenFilterV2",
  "name":"my_edgeNGram",
  "minGram": 2,
  "maxGram": 25,
  "side": "front"
  }
]
}

Sonraki adımlar

Bu makalede çözümleyicilerin hem sorgu sorunlarına nasıl katkıda bulunup hem de sorgu sorunlarını nasıl çözdüğü açıklanmaktadır. Sonraki adım olarak, çözümleyicilerin dizin oluşturmayı ve sorgu işlemeyi etkilediğine daha yakından bakın.