TairSearch, Tair (Redis OSS Uyumlu) içinde yerleşik gelen bir tam metin arama modülüdür. Elasticsearch'e benzer bir sorgu sözdizimi kullanarak milisaniye düzeyinde yazma ve arama performansı sunar.
Genel Bakış
TairSearch aşağıdaki yetenekleri sağlar:
Düşük gecikme süresi ve yüksek performans: Tair bellek içi motoruyla desteklenen milisaniye düzeyinde yazma ve tam metin arama. Ayrıntılar için bkz. TairSearch performans teknik incelemesi.
Artımlı ve kısmi güncellemeler: Tüm belgeleri yeniden yazmadan tek tek belge alanlarını ekleyin, güncelleyin, kaldırın ve otomatik olarak artırın.
Elasticsearch benzeri sorgu sözdizimi:
bool,match,term, sayfalama ve sıralamayı destekleyen JSON tabanlı Sorgu DSL'si; Elasticsearch deneyimi olan geliştiricilere aşina gelir.Toplama: Arama sonuçlarında analitik yapmak için
terms, ölçümler vefiltertoplamaları. Bkz. Toplamalar.Otomatik tamamlama: Yazarken arama deneyimi için önek tabanlı bulanık eşleştirme.
Yerleşik ve özel çözümleyiciler: İngilizce (
standard,stop), Çince (jieba,IK) ve diğer diller için yerleşik çözümleyiciler. Kullanıcı tanımlı sözlükler ve durdurma sözcükleri içeren özel çözümleyiciler de desteklenir. Ayrıntılar için bkz. Arama çözümleyicileri.Parça dizini sorgusu: Birden çok parça dizininde
TFT.MSEARCHile arama yapın ve toplanmış sonuçlar alın.Belge sıkıştırma: Bellek kullanımını azaltmak için depolanan belgeleri sıkıştırır. Varsayılan olarak devre dışıdır.
Sorgu önbelleğe alma: Sık kullanılan verilerin sorgu performansını artırmak için son sorgu sonuçlarını önbelleğe alır.
Ön Koşullar
Örnek, aşağıdaki sürümlerden birini çalıştıran bir Tair bellek optimize edilmiş örnek (DRAM tabanlı) olmalıdır:
|
|
|
|
|
|
|
|
|
|
|
|
En fazla özellik ve en yüksek kararlılık için örneği en son alt sürüme güncelleyin. Yönergeler için bkz. Alt ve proxy sürümlerini yükseltme . Küme veya okuma/yazma bölme örnekleri için tüm komutların beklendiği gibi çalışmasını sağlamak adına proxy düğümlerini de en son alt sürüme güncelleyin.
Sürüm Notları
Redis 5.0 uyumlu DRAM tabanlı örnekler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Redis 6.0 uyumlu DRAM tabanlı örnekler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Redis 7.0 uyumlu DRAM tabanlı örnekler
|
|
|
|
|
|
|
|
En İyi Uygulamalar
Kullanım Notları
TairSearch verileri Tair örneğinde depolanır ve örnek belleğini tüketir.
-
Bellek kullanımını azaltmak için:
Yalnızca aranabilir olması gereken alanlar için
indexdeğerinitrueolarak ayarlayın. Diğer alanlar içinindexdeğerinifalseolarak ayarlayın.Yalnızca ihtiyaç duyduğunuz belge alanlarını depolamak için
_sourceileincludes/excludeskalıplarını kullanın.Gereksiz belirteçleme ve artan bellek kullanımından kaçınmak için uygun bir çözümleyici seçin.
Büyük belgeler için belge sıkıştırmayı etkinleştirin.
Dizin başına belge sayısını 5 milyonun altında tutun. Bu, küme örneklerinde veri eğrilmesini önler, okuma ve yazma isteklerini dengeler ve büyük anahtarları ile sıcak anahtarları azaltır. Büyük veri kümelerini birden çok dizine bölün ve bunları birlikte sorgulamak için
TFT.MSEARCHkullanın.
Sözdizimi Kuralları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tam Metin Arama Komutları
TFT.CREATEINDEX
Bir eşleme tanımıyla bir dizin oluşturur. Eşleme sözdizimi Elasticsearch açık eşleme ile benzerdir. Belgeler eklenmeden önce bir dizin oluşturulmalıdır.
Sözdizimi
TFT.CREATEINDEX index mappings [settings]
Büyük anahtarları önlemek için büyük dizinleri aynımappingsvesettingsdeğerlerine sahip daha küçük dizinlere bölün, ardından bunlarıTFT.MSEARCHile birlikte sorgulayın.
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Eşleme seçenekleri
mappings nesnesi aşağıdaki üst düzey alanları destekler:
dynamic
Eşleme modu. Geçerli değerler:
"strict"-- Veriler yalnızcapropertiesiçinde tanımlanan alanlara yazılabilir. Tanımsız alanlara yazma işlemi başarısız olur.Belirtilmemiş (varsayılan) -- Katı olmayan mod. Sistem, yazılan alanların
propertiesiçinde tanımlı olup olmadığını kontrol etmez.
enabled
Dizine eklenmemiş alanlar için (index değeri false olarak ayarlanmış) tür denetimini kontrol eder. Geçerli değerler: true (varsayılan) ve false. true olduğunda, alan türü properties içinde tanımlanan türle eşleşmezse yazma işlemi başarısız olur. Dizine eklenen alanlar, bu ayardan bağımsız olarak her zaman tür denetimine tabi tutulur.
_source
Orijinal belgenin depolanıp depolanmayacağını kontrol eder. Bu ayar dizin oluşturmayı etkilemez.
enabled--true(varsayılan) orijinal belgeyi depolar.falsedepolamaz.includes-- Dahil edilecek alan adı kalıplarının bir dizisi. Joker karakterler desteklenir.excludes-- Hariç tutulacak alan adı kalıplarının bir dizisi. Joker karakterler desteklenir. Bir alan hemincludeshem deexcludesile eşleşirseexcludesönceliklidir (alan depolanmaz).
Örnekler:
"_source": {"enabled": true}
Bu varsayılandır -- tüm alanları depolar. "_source": {"enabled": true, "excludes": [], "includes": []} ile eşdeğerdir.
"_source": {"enabled": true, "excludes": [], "includes": ["id", "name"]}
Yalnızca id ve name alanlarını depolar.
properties
Alan tanımlarının bir koleksiyonu. Her alan aşağıdaki nitelikleri destekler:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Alan türleri
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ARRAY desteği: Tüm alan türleri dizi varyantlarını destekler. Tür adına [] ekleyin. Örneğin, keyword[] bir anahtar sözcük dizisi bildirir.
TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"tags":{"type":"keyword[]"}}}}'
Metin çözümleyici seçenekleri
|
|
|
|
|
|
|
|
|
|
|
|
Yerleşik çözümleyiciler
standard (varsayılan), jieba (Çince için önerilir, chinese değerinden daha iyi çalışır), stop, IK, pattern, whitespace, simple, keyword, chinese, french, dutch, russian.
Ayrıntılar için bkz. Yerleşik çözümleyiciler.
Dizin ayarları
İsteğe bağlı settings nesnesi aşağıdaki alanları destekler:
analysis
Özel çözümleyicileri tanımlar. Ayrıntılar için bkz. Özel çözümleyiciler.
index
Özel benzerlik algoritmalarını yapılandırır. Okapi BM25 parametrelerini özelleştirmek için bunu kullanın:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek:
TFT.CREATEINDEX idx:products '{"mappings":{"properties":{"name":{"type":"keyword","similarity":"my_bm25"}}},"settings":{"index":{"similarity":{"my_bm25":{"type":"BM25","k1":1.0,"b":1.0}}}}}'
queries_cache
Sorgu sonucu önbelleğini yapılandırır. Varsayılan olarak önbellek, bellek sınırı olmadan en fazla 10.000 sonuç saklar. Dolu olduğunda sonuçlar En Az Son Kullanılan (LRU) algoritması kullanılarak temizlenir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek:
"settings": {"queries_cache": {"size": "100mb", "ttl": 3}}
queries_cachedüğüm düzeyinde bir parametredir. Bir dizinde yapılandırılması aynı işlemdeki diğer tüm dizinleri etkiler. Tüm dizinlerde aynıqueries_cacheyapılandırmasını kullanın.
compress_doc
Şeffaf belge sıkıştırmayı yapılandırır. Sıkıştırmayı etkinleştirmek CPU tüketimini ve okuma/yazma gecikme süresini artırır. Bu özelliği yalnızca dizin büyükse (kilobayt veya daha fazla) ve depolama maliyeti birincil endişe ise etkinleştirin.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek:
"settings": {"compress_doc": {"size": "1kb", "enable": true}}
Sıkıştırma yalnızca ayarı TFT.UPDATEINDEX ile etkinleştirdikten sonra yazılan veya güncellenen belgelere uygulanır. Mevcut belgeler geriye dönük olarak sıkıştırılmaz.
Dönüş değeri
Başarılı olduğunda:
OKBaşarısız olduğunda: Bir hata mesajı
Örnek
TFT.CREATEINDEX idx:product '{"mappings":{"_source":{"enabled":true},"properties":{"product_id":{"type":"keyword","ignore_above":128},"product_name":{"type":"text"},"product_title":{"type":"text","analyzer":"jieba"},"price":{"type":"double"}}}}'
OK
Ayrıca bkz.: TFT.UPDATEINDEX, TFT.GETINDEX
TFT.UPDATEINDEX
Bir dizin eşlemesine yeni alanlar ekler veya dizin ayarlarını değiştirir.
Sözdizimi
TFT.UPDATEINDEX index mappings [settings]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
mappings ve settings için tam sözdizimi hakkında bilgi edinmek için bkz. TFT.CREATEINDEX.
Dönüş değeri
Başarılı olduğunda:
OKBaşarısız olduğunda: Bir hata mesajı
Örnek
TFT.UPDATEINDEX idx:product '{"mappings":{"properties":{"product_group":{"type":"text","analyzer":"chinese"}}}}'
OK
Ayrıca bkz.: TFT.CREATEINDEX, TFT.GETINDEX
TFT.GETINDEX
Bir dizinin eşlemesini ve ayarlarını alır.
Sözdizimi
TFT.GETINDEX index
Parametreler
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olduğunda: Dizinin JSON biçimli eşleme içeriği
Başarısız olduğunda: Bir hata mesajı
Örnek
TFT.GETINDEX idx:product
{"idx:product0310":{"mappings":{"_source":{"enabled":true,"excludes":[],"includes":["product_id"]},"dynamic":"false","properties":{"price":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"double"},"product_id":{"boost":1.0,"enabled":true,"ignore_above":128,"index":true,"similarity":"classic","type":"keyword"},"product_name":{"boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"},"product_title":{"analyzer":"chinese","boost":1.0,"enabled":true,"ignore_above":-1,"index":true,"similarity":"classic","type":"text"}}}}}
Ayrıca bkz.: TFT.CREATEINDEX, TFT.UPDATEINDEX
TFT.ADDDOC
Bir dizine tek bir belge ekler.
Sözdizimi
TFT.ADDDOC index document [WITH_ID doc_id]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_sourcedeğeriincludesile yapılandırılmışsa belge eklenirken veya güncellenirken yalnızcaincludeslistesinde belirtilen alanlar depolanır.
Dönüş değeri
Başarılı olduğunda: Belge kimliğini içeren bir JSON nesnesi, örn.
{"_id":"00001"}Başarısız olduğunda: Bir hata mesajı
Örnekler
Özel bir kimlikle belge ekleme:
TFT.ADDDOC idx:product '{"product_id":"product test"}' WITH_ID 00001
{"_id":"00001"}
Dizi alanı içeren bir belge ekleme:
TFT.ADDDOC idx:product '{"product_id":["an","2","3df"]}' WITH_ID 00001
Ayrıca bkz.: TFT.MADDDOC, TFT.UPDATEDOCFIELD, TFT.DELDOC
TFT.MADDDOC
Tek bir atomik işlemde bir dizine birden çok belge ekler. Herhangi bir belgenin biçimi geçersizse belgelerin hiçbiri eklenmez.
Sözdizimi
TFT.MADDDOC index document doc_id [document1 doc_id1] ...
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_sourcedeğeriincludesile yapılandırılmışsa belge eklenirken veya güncellenirken yalnızcaincludeslistesinde belirtilen alanlar depolanır.
Dönüş değeri
Başarılı olduğunda:
OKBaşarısız olduğunda: Bir hata mesajı
Örnek
TFT.MADDDOC idx:product '{"product_id":"test1"}' 00011 '{"product_id":"test2"}' 00012
OK
Ayrıca bkz.: TFT.ADDDOC, TFT.DELDOC
TFT.UPDATEDOCFIELD
Bir belgedeki belirli alanları günceller. Belge mevcut değilse oluşturulur (TFT.ADDDOC komutu ile eşdeğerdir). Alan mevcut değilse eklenir.
Sözdizimi
TFT.UPDATEDOCFIELD index doc_id document
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Eğer_sourceparametresiincludesile yapılandırılmışsa, belge ekleme veya güncelleme sırasında yalnızcaincludeslistesinde belirtilen alanlar depolanır.
Dönüş değeri
Başarılı olursa:
OKBaşarısız olursa: Bir hata mesajı
Örnek
TFT.UPDATEDOCFIELD idx:product 00011 '{"product_id":"test8","product_group":"BOOK"}'
OK
Ayrıca bakınız: TFT.ADDDOC, TFT.DELDOCFIELD
TFT.DELDOCFIELD
Bir belgeden bir veya daha fazla alanı siler. Alan dizine alınmışsa, ilgili dizin girişi de kaldırılır.
Sözdizimi
TFT.DELDOCFIELD index doc_id field [field1 field2 ...]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Belirtilen alan belgede mevcut değilse (örneğin, _source tarafından filtrelenen bir alan) işlem başarısız olur.
Dönüş değeri
Başarılı olursa: Silinen alan sayısı (tamsayı)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.DELDOCFIELD idx:product 00011 product_group
(integer) 1
Ayrıca bakınız: TFT.UPDATEDOCFIELD
TFT.INCRLONGDOCFIELD
Bir belgedeki tamsayı alanını artırır. Alanın türü LONG veya INTEGER olmalıdır. ARRAY veri türü desteklenmez.
Sözdizimi
TFT.INCRLONGDOCFIELD index doc_id field increment
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Belge mevcut değilse, artış uygulanmadan önce alan0değeriyle başlatılarak otomatik olarak oluşturulur. Alan belgede mevcut değilse (örneğin,_sourcetarafından filtrelenen bir alan) işlem başarısız olur.
Dönüş değeri
Başarılı olursa: Güncellenmiş alan değeri (tamsayı)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.INCRLONGDOCFIELD idx:product 00011 stock 100
(integer)100
Ayrıca bakınız: TFT.INCRFLOATDOCFIELD, TFT.UPDATEDOCFIELD
TFT.INCRFLOATDOCFIELD
Bir belgedeki kayan noktalı sayı alanını artırır. Alanın türü DOUBLE olmalıdır. ARRAY veri türü desteklenmez.
Sözdizimi
TFT.INCRFLOATDOCFIELD index doc_id field increment
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Belge mevcut değilse, artış uygulanmadan önce alan0değeriyle başlatılarak otomatik olarak oluşturulur. Alan belgede mevcut değilse (örneğin,_sourcetarafından filtrelenen bir alan) işlem başarısız olur.
Dönüş değeri
Başarılı olursa: Güncellenmiş alan değeri (dize)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.INCRFLOATDOCFIELD idx:product 00011 stock 299.6
"299.6"
Ayrıca bakınız: TFT.INCRLONGDOCFIELD, TFT.UPDATEDOCFIELD
TFT.GETDOC
Kimliğine göre bir belgeyi getirir.
Sözdizimi
TFT.GETDOC index doc_id
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Belge kimliğini ve içeriğini içeren bir JSON nesnesi
Başarısız olursa: Bir hata mesajı
Örnek
TFT.GETDOC idx:product 00011
{"_id":"00011","_source":{"product_id":"test8"}}
Ayrıca bakınız: TFT.EXISTS, TFT.SEARCH
TFT.EXISTS
Bir belgenin bir dizinde olup olmadığını kontrol eder.
Sözdizimi
TFT.EXISTS index doc_id
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Belge mevcutsa
1Dizin veya belge mevcut değilse
0Başarısız olursa: Bir hata mesajı
Örnek
TFT.EXISTS idx:product 00011
(integer) 1
Ayrıca bakınız: TFT.GETDOC, TFT.DOCNUM
TFT.DOCNUM
Bir dizindeki belge sayısını alır.
Sözdizimi
TFT.DOCNUM index
Parametreler
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Belge sayısı (tamsayı)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.DOCNUM idx:product
(integer) 3
Ayrıca bakınız: TFT.EXISTS, TFT.SCANDOCID
TFT.SCANDOCID
Redis SCAN komutuna benzer şekilde, bir imleç kullanarak bir dizindeki belge kimliklerini tarar.
Sözdizimi
TFT.SCANDOCID index cursor [MATCH *value*] [COUNT count]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
İki öğeli bir dizi:
Sonraki yineleme için imleç.
0değeri taramanın tamamlandığını gösterir.Belge kimliklerinden oluşan bir dizi.
Örnek
TFT.SCANDOCID idx:product 0 COUNT 3
1) "0"
2) 1) "00001"
2) "00011"
3) "00012"
Ayrıca bakınız: TFT.DOCNUM, TFT.GETDOC
TFT.DELDOC
Belge kimliğine göre bir dizinden bir veya daha fazla belgeyi siler.
Sözdizimi
TFT.DELDOC index doc_id [doc_id] ...
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Gerçekten silinen belge sayısı (dize). Mevcut olmayan kimlikler yoksayılır.
Başarısız olursa: Bir hata mesajı
Örnek
TFT.DELDOC idx:product 00011 00014
"1" # Document 00014 does not exist, so only document 00011 is deleted.
Ayrıca bakınız: TFT.DELALL, TFT.ADDDOC
TFT.DELALL
Dizini ve eşlemesini koruyarak bir dizindeki tüm belgeleri siler.
Sözdizimi
TFT.DELALL index
Parametreler
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa:
OKBaşarısız olursa: Bir hata mesajı
Örnek
TFT.DELALL idx:product
OK
Ayrıca bakınız: TFT.DELDOC, DEL
TFT.ANALYZER
Bir çözümleyicinin verilen metni nasıl belirteçlere ayırdığını test eder.
Sözdizimi
TFT.ANALYZER analyzer_name text [INDEX index_name] [SHOW_TIME]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Belirteç ayrıntılarını içeren bir JSON nesnesi
Başarısız olursa: Bir hata mesajı
Örnek
TFT.ANALYZER standard "Tair is a nosql database"
{
"tokens": [
{"token": "Tair", "start_offset": 0, "end_offset": 4, "position": 0},
{"token": "nosql", "start_offset": 10, "end_offset": 15, "position": 3},
{"token": "database", "start_offset": 16, "end_offset": 24, "position": 4}
]
}
DEL (yerel Redis)
Bir veya daha fazla TairSearch anahtarını (dizinleri) silmek için yerel Redis DEL komutunu kullanın.
DEL key [key ...]
Ayrıntılar için bkz. DEL komut referansı.
TFT.SEARCH
Sorgu DSL kullanarak bir dizindeki belgeleri arar.
Sözdizimi
TFT.SEARCH index query
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Sorgu sözdizimi, Elasticsearch Query DSL ile benzerdir.
Dönüş değeri
Başarılı olursa, arama sonuçlarını içeren bir JSON nesnesi:
{
"hits": {
"hits": [
{"_id": "...", "_index": "...", "_score": 1.0, "_source": {...}}
],
"max_score": 1.0,
"total": {
"relation": "eq",
"value": 3
}
}
}
total.relation alanı, sayının total.value ile nasıl ilişkili olduğunu belirtir:
"eq"-- Sayı kesindir."gte"-- Sayı en az bu değerdedir (track_total_hitsdeğerifalseolduğunda).
Örnek
TFT.SEARCH idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{"hits":{"hits":[{"_id":"fruits_3","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_3","product_name":"orange","price":30.2,"stock":3000}},{"_id":"fruits_2","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_2","product_name":"banana","price":24.0,"stock":2000}},{"_id":"fruits_1","_index":"idx:product","_score":1.0,"_source":{"product_id":"fruits_1","product_name":"apple","price":19.5,"stock":1000}}],"max_score":1.0,"total":{"relation":"eq","value":3}}}
Ayrıca bakınız: TFT.MSEARCH, TFT.EXPLAINCOST, TFT.EXPLAINSCORE
Sorgu türleri
Sorgu DSL'sindeki query alanı aşağıdaki sorgu türlerini destekler.
Sıralama
Sonuç sıralamasını kontrol etmek için sort alanını kullanın. ARRAY veri türü sıralama için desteklenmez.
|
|
|
|
|
|
|
|
|
|
|
|
Çok alanlı sıralama için bir dizi kullanın. Sıralama yönünü order ("desc" veya "asc") ile kontrol edin:
{"sort": [{"price": {"order": "desc"}}, {"_doc": {"order": "desc"}}]}
Kaynak filtreleme
Hangi belge alanlarının sonuçlarda görüneceğini kontrol etmek için _source alanını kullanın:
{"_source": {"includes": ["f0"]}}
Joker karakter desenleriyle hem includes hem de excludes öğelerini destekler.
Sayfalama
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fromvesizebirlikte kullanıldığında sayfalama sağlar.fromarttıkça sorgu performansı düşer.
track_total_hits
term, terms veya match sorguları için eşleşen tüm belgelerin sayılıp sayılmayacağını kontrol eder (bileşik sorgular da desteklenir ancak match içindeki bulanık eşleştirme devre dışı bırakılır).
|
|
|
|
|
|
|
|
|
track_total_hits değerini true olarak ayarlamak ve çok sayıda eşleşen belge olması sorguların yavaşlamasına neden olabilir. Dikkatli kullanın.
TFT.MSEARCH
Kimlik eşlemeleri ve ayarları aynı olan birden çok dizinde arama yapar, ardından birleştirilmiş sonuçları toplayıp döndürür.
Sözdizimi
TFT.MSEARCH index_count index [index1] ... query
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TFT.MSEARCHfromparametresini desteklemez. Bunun yerine imleç tabanlı sayfalamayı kullanın (aşağıya bakın).
İmleç tabanlı sayfalama
Sayfalama için size, reply_with_keys_cursor ve keys_cursor öğelerini birlikte kullanın:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Nasıl çalışır:
İlk sorgu:
reply_with_keys_cursordeğerinitrueolarak ayarlayın vekeys_cursoröğesini atlayın (veya0olarak ayarlayın). Tair, her dizindensizebelge alır, ardından birleştirilmiş sonuçları toplar, puanlar, sıralar ve toplar; en üsttekisizebelgeyi döndürür. Yanıt, her dizin içinkeys_cursorkonumlarını içerir.Sonraki sorgu: Önceki yanıttan döndürülen
keys_cursordeğerini iletin. Tair, her dizindeki imleç konumlarından alım işlemini sürdürür.
Toplama davranışı
TFT.MSEARCH birleştirilen veri kümesini toplamak yerine her dizinden gelen alt sonuç kümelerini toplar:
Oranlandırma ve sıralama: Alt sonuç kümelerini puanlar ve sıralar.
sum, max, min, avg, value_count: Alt sonuç kümeleri arasında toplama işlemi yapar.
sum_of_squares, variance, std_deviation: Alt sonuç kümeleri arasında ortalama alır.
Terms toplama ve filter toplama: Alt sonuç kümelerini ayrı ayrı toplar.
Dönüş değeri
Başarı durumunda, TFT.SEARCH çıkışına benzer bir JSON nesnesi ve ayrıca bir aux_info alanı döndürülür:
{
"aux_info": {
"index_crc64": 15096806844241479487,
"keys_cursor": {"key0": 2, "key1": 5, "key2": 3},
"field_type": {"f0": "long"}
}
}
|
|
|
|
|
|
|
|
|
|
|
|
Örnek
Aynı kimlik eşlemesine sahip üç dizin ayarlayın:
TFT.CREATEINDEX key0 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key1 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.CREATEINDEX key2 '{"mappings":{"properties":{"f0":{"type":"long"}}}}'
TFT.ADDDOC key0 '{"f0":120}'
TFT.ADDDOC key0 '{"f0":130}'
TFT.ADDDOC key1 '{"f0":140}'
TFT.ADDDOC key1 '{"f0":150}'
TFT.ADDDOC key2 '{"f0":160}'
TFT.ADDDOC key2 '{"f0":170}'
İlk sayfa:
TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true}'
{"hits":{"hits":[{"_id":"16625439765504840","_index":"key2","_score":1.0,"_source":{"f0":170}},{"_id":"16625439741096630","_index":"key2","_score":1.0,"_source":{"f0":160}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":0,"key2":2}}}
İkinci sayfa (önceki yanıttan keys_cursor değerini iletin):
TFT.MSEARCH 3 key0 key1 key2 '{"size":2,"query":{"range":{"f0":{"gt":120,"lte":170}}},"sort":[{"f0":{"order":"desc"}}],"reply_with_keys_cursor":true,"keys_cursor":{"key0":0,"key1":0,"key2":2}}'
{"hits":{"hits":[{"_id":"16625439652681160","_index":"key1","_score":1.0,"_source":{"f0":150}},{"_id":"16625439624704580","_index":"key1","_score":1.0,"_source":{"f0":140}}],"max_score":1.0,"total":{"relation":"eq","value":5}},"aux_info":{"index_crc64":10084399559244916810,"keys_cursor":{"key0":0,"key1":2,"key2":2}}}
Ayrıca bkz.: TFT.SEARCH
TFT.EXPLAINCOST
Bir sorgunun yürütme süresi dökümünü alır.
Sözdizimi
TFT.EXPLAINCOST index query
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Aşağıdaki bölümleri içeren bir JSON nesnesi:
|
|
|
|
|
|
|
|
|
|
|
|
Örnek
TFT.EXPLAINCOST idx:product '{"sort":[{"price":{"order":"desc"}}]}'
{
"QUERY_COST": {
"query": "MATCHALL_QUERY",
"doc_num": 1,
"time_cost_us": 2
},
"COLLECTOR_COST": {
"collector_type": "CustomSortCollector",
"time_cost_us": 20
}
}
Ayrıca bkz.: TFT.SEARCH, TFT.EXPLAINSCORE
TFT.EXPLAINSCORE
Arama sonuçları için ayrıntılı puanlama dökümlerini alır ve belge puanlarının nasıl hesaplandığını gösterir.
Yalnızca Redis 6.0 veya sonraki sürümlerle uyumlu DRAM tabanlı örneklerde kullanılabilir.
Sözdizimi
TFT.EXPLAINSCORE index query [doc_id] ...
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
TFT.SEARCH ile aynı sonuç kümesi ve ayrıca her belge için şunları içeren bir _explanation nesnesi:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnek
TFT.EXPLAINSCORE today_shares '{"query":{"wildcard":{"shares_name":{"value":"*BY"}}}}'
{
"hits": {
"hits": [
{
"_id": "17036492095306830",
"_index": "today_shares",
"_score": 1.0,
"_source": {
"shares_name": "YBY",
"logictime": 14300410,
"purchase_type": 1,
"purchase_price": 11.1,
"purchase_count": 100,
"investor": "Mila"
},
"_explanation": {
"score": 1.0,
"description": "score, computed as query_boost",
"field": "shares_name",
"term": "*BY",
"query_boost": 1.0
}
}
],
"max_score": 1.0,
"total": {"relation": "eq", "value": 1}
}
}
Ayrıca bkz.: TFT.SEARCH, TFT.EXPLAINCOST
Otomatik tamamlama komutları
TFT.ADDSUG
İlişkili ağırlıklarla birlikte bir veya daha fazla otomatik tamamlama metin girişi ekler.
Sözdizimi
TFT.ADDSUG index text weight [text weight] ...
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarı durumunda: Eklenen metin girişlerinin sayısı (tamsayı)
Hata durumunda: Bir hata iletisi
Örnek
TFT.ADDSUG idx:redis 'redis is a memory database' 3 'redis cluster' 10
(integer) 2
Ayrıca bkz.: TFT.GETSUG, TFT.DELSUG, TFT.SUGNUM
TFT.DELSUG
Bir dizinden bir veya daha fazla otomatik tamamlama metin girişini siler.
Sözdizimi
TFT.DELSUG index text [text] ...
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Silinen metin girişlerinin sayısı (tamsayı)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.DELSUG idx:redis 'redis is a memory database' 'redis cluster'
(integer) 2
Ayrıca bakınız: TFT.ADDSUG, TFT.SUGNUM
TFT.SUGNUM
Bir dizindeki otomatik tamamlama metin girişlerinin sayısını alır.
Sözdizimi
TFT.SUGNUM index
Parametreler
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Giriş sayısı (tamsayı)
Başarısız olursa: Bir hata mesajı
Örnek
TFT.SUGNUM idx:redis
(integer) 3
Ayrıca bakınız: TFT.ADDSUG, TFT.GETSUG
TFT.GETSUG
Bir ön ekle eşleşen otomatik tamamlama önerilerini alır. Sonuçlar, ağırlığa göre azalan sırada döndürülür.
Sözdizimi
TFT.GETSUG index prefix [MAX_COUNT count] [FUZZY]
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Eşleşen otomatik tamamlama metin girişlerinin listesi
Başarısız olursa: Bir hata mesajı
Örnek
TFT.GETSUG idx:redis res MAX_COUNT 2 FUZZY
1) "redis cluster"
2) "redis lock"
Ayrıca bakınız: TFT.ADDSUG, TFT.GETALLSUGS
TFT.GETALLSUGS
Bir dizindeki tüm otomatik tamamlama metin girişlerini alır.
Sözdizimi
TFT.GETALLSUGS index
Parametreler
|
|
|
|
|
|
|
|
Dönüş değeri
Başarılı olursa: Tüm otomatik tamamlama metin girişlerinin listesi
Başarısız olursa: Bir hata mesajı
Örnek
TFT.GETALLSUGS idx:redis
1) "redis cluster"
2) "redis lock"
3) "redis is a memory database"
Ayrıca bakınız: TFT.GETSUG, TFT.ADDSUG
Toplamalar
Sonuç kümesi üzerinde toplama işlemi gerçekleştirmek için bir TFT.SEARCH sorgusuna bir aggs (veya aggregations) yan tümcesi ekleyin.
Temel kullanım
Özel bir toplama adı, toplama türü ve toplanacak field belirtin:
TFT.SEARCH shares '{"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
Yanıt, hem query sonuçlarını hem de aggs toplama sonuçlarını içerir:
{"hits":{"hits":[{"_id":"16581351808123930","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}},{"_id":"16581351809626430","_index":"today_shares0718","_score":1.0,"_source":{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}}],"max_score":1.0,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}
Yalnızca toplama sonuçlarını belgeler olmadan döndürmek için sorguya "size": 0 ekleyin.
Metrik toplamaları
Metrik toplamaları, sayısal alanlar (integer, double vb.) üzerinde sayısal hesaplamalar gerçekleştirir ve iç içe alt toplamaları desteklemez.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Yalnızcavalue_countkeywordalanlarını destekler. Diğer tüm ölçümler sayısal alanlar gerektirir.
Çıktı: Belirtilen alandan hesaplanan bir DOUBLE değeri.
Terim toplamaları
Bir keyword alanındaki yinelenmeyen değerleri sayar. İç içe alt toplamaları destekler.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Çıktı: buckets içeren bir JSON nesnesi. Her grup, key (alan değeri) ve doc_count (belge sayısı) içerir:
{
"aggregations": {
"Per_Investor_Freq": {
"buckets": [
{"doc_count": 2, "key": "Jay"},
{"doc_count": 1, "key": "Mila"}
]
}
}
}
Örnek:
{"aggs": {"Per_Investor_Freq": {"terms": {"field": "investor"}}}}
Filtre toplamaları
Sorgu sonuçlarını bir sorgu deyimiyle filtreler ve eşleşen belgeleri sayar. İç içe alt toplamaları destekler.
Çıktı: Filtre koşuluyla eşleşen belge sayısı (doc_count).
Toplama örnekleri
Aşağıdaki örneklerde bir hisse senedi ticareti veri kümesi kullanılmıştır.
Adım 1: Dizini oluşturun
TFT.CREATEINDEX today_shares '{"mappings":{"properties":{"shares_name":{"type":"keyword"},"logictime":{"type":"long"},"purchase_type":{"type":"integer"},"purchase_price":{"type":"double"},"purchase_count":{"type":"long"},"investor":{"type":"keyword"}}}}'
Adım 2: Belgeler ekleyin
TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300210,"purchase_type":1,"purchase_price":101.1,"purchase_count":100,"investor":"Jay"}'
TFT.ADDDOC today_shares '{"shares_name":"XAX","logictime":14300310,"purchase_type":1,"purchase_price":111.1,"purchase_count":100,"investor":"Jay"}'
TFT.ADDDOC today_shares '{"shares_name":"YBY","logictime":14300410,"purchase_type":1,"purchase_price":11.1,"purchase_count":100,"investor":"Mila"}'
Adım 3: Sorguları çalıştırın
sum -- Bir yatırımcının toplam satın alma tutarı
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Sum":{"sum":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Sum":{"value":212.2}}}
max -- Bir yatırımcının en yüksek satın alma fiyatı
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Max":{"max":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Max":{"value":111.1}}}
avg -- Bir yatırımcının ortalama satın alma fiyatı
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Avg":{"avg":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Avg":{"value":106.1}}}
std_deviation -- Satın alma fiyatlarının standart sapması
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Std_Deviation":{"std_deviation":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Std_Deviation":{"value":5.0}}}
extended_stats -- Tüm istatistikler tek seferde
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"investor":"Jay"}},"aggs":{"Jay_Extended_Stats":{"extended_stats":{"field":"purchase_price"}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":2}},"aggregations":{"Jay_Extended_Stats":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}
terms -- En az iki işlem yapan yatırımcılar
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"investor","min_doc_count":2,"order":{"_key":"desc"}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"Jay","doc_count":2}]}}}
İç içe terim toplamaları -- Hisse başına işlem sayısı ve ortalama fiyat
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Per_Investor_Freq":{"terms":{"field":"shares_name","include":"[A-Z]+","exclude":["XAX"]},"aggs":{"Price_Avg":{"avg":{"field":"purchase_price"}}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Per_Investor_Freq":{"buckets":[{"key":"YBY","doc_count":1,"Price_Avg":{"value":11.1}}]}}}
İç içe filtre toplamaları -- Yatırımcıya göre filtreleme ve genişletilmiş istatistikler
TFT.SEARCH today_shares '{"size":0,"query":{"term":{"purchase_type":1}},"aggs":{"Jay_BuyIn_Filter":{"filter":{"term":{"investor":"Jay"}},"aggs":{"Jay_BuyIn_Quatation":{"extended_stats":{"field":"purchase_price"}}}}}}'
{"hits":{"hits":[],"max_score":null,"total":{"relation":"eq","value":3}},"aggregations":{"Jay_BuyIn_Filter":{"doc_count":2,"Jay_BuyIn_Quatation":{"count":2,"sum":212.2,"max":111.1,"min":101.1,"avg":106.1,"sum_of_squares":10221.21,"variance":25.0,"std_deviation":5.0}}}}