2015-08-12 39 views
5

Elasticsearch (1.7) 'a karşı genel bir arama yapıyorum ve hesap numaramın hepsinde eğik çizgiler var. Hesap numarası alanı kimlik alanı değil ve "not_analyzed".elasticsearch'te eğik çizgiden kaçış

Bir hesap numarasında arama yaparsam ör. AC/1234/A01 daha sonra binlerce sonuç alırım, muhtemelen bir düzenli arama (?) Yapıyor çünkü.

{ 
    "query" : { "query_string" : {"query" : "AC/1234/A01"} } 
} 

I ('tek çevreleyen yedek olarak tasarıyı uyacak muhtemelen Bu aslında bana istediğim sonuç verir ben

{ 
    "query" : { "query_string" : {"query" : "\"AC/1234/A01\""} } 
    } 

tam bir eşleşme arama yaparak istediğiniz sonucu elde edebilir kelime 'tırnak işaretleri ile arar. Ancak, binlerce sonuçlara geri döneceğim hesap numarasını içeren bir çok kelime araması yaparlarsa ve bu aramanın değerini göremesem de bunun olmasını önlemek isterim diye düşünüyorum.

Temelde elastik aramayı sorgulayan bir java uygulamasına sahibim ve GUI'ye girilen tüm ileri eğik çizgileri kullanmak istiyorum.

Benim Googling

{ 
    "query" : { "query_string" : {"query" : "AC\\/1234\\/A01"} } 
} 

bunu gerektiğini söyledi ancak hiç fark etmez, sorgu işleri ama hala sonuçları binlerce olsun.

Herkes bana doğru yönde işaret edebilir mi?

Sadece bu gibi sorgu dizesi için bir keyword analyzer belirterek şey kaçan olmadan istediğini elde etmelidir
+1

Neden 'query_string' kullanıyorsunuz? 'terim' olduğu gibi bir terimle eşleşir. – Maroun

+0

Arama terimleri için, boolean operatörleri olsun veya olmasın, bir kelime veya cümle olabilecek bir giriş kutusu vardır. En temelde tüm verileri sorgulamaktadır./Dışında hariç çalışıyor. Anladığım kadarıyla, bir terim sorgu her seferinde bir alanı sorgulayabiliyor (ve sorguyu kendim düşündüğüm bir terim sorgusu kullanmak için kendim ayrıştırmam gerekecek)? Lütfen yanılıyorsam beni düzeltin! – gringogordo

+1

"Term" sorgusu ile "match" ve "query_string" arasındaki temel fark, "teriminin" girdiyi analiz etmemesidir. 'Terim' sorgusunu kullanarak bir terim arayabilir ve terimleri kullanarak çift terimleri bir kerede yapabilirsiniz. Birden çok alanda arama yapmak için en uygun olanı "multi_match" veya "query_string" dir. Kontrol edemedim ama sanırım 'term' sorgusu '_all' ve' trick '' 'terimleri' 'terimini de aynı anda birden fazla sütuna bakmak için kullanabilirsiniz. – slawek

cevap

9

: Bunu yapmazsanız, standart analiz cihazı kullanılır

{ 
    "query" : { 
    "query_string" : { 
     "query" : "AC/1234/A01", 
     "analyzer": "keyword"   <---- add this line 
    } 
    } 
} 

(ve simgeleştirir edecek sorgu dizginiz) alanınızın türü ne olursa olsun veya not_analyzed olup olmadığı.

+0

Çok teşekkürler, Bu tasarıya uygun görünüyor. Üretime koymadan önce biraz daha iyi anlamam gerekiyor sanırım (booleanları ve diğer daha gelişmiş arama tekniklerini etkiliyor ... daha fazla çalışma yapma zamanı!) Ama bu mükemmel görünüyor. Çok teşekkürler. – gringogordo

+8

Bu, en son ES'de çalışmıyor gibi görünüyor! –