2016-03-21 24 views
0
ile Elasticsearch içinde

Elasticsearch içinde Query String Query ile ilgili bir sorunum var. Ben burada çoğaltmak için bir Sense kodu yazarım.Sorgu Dizesi Sorguyu, - ve *

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "t-shirt*" 
     } 
    } 
} 

Bu sorgular (ama endeksli belge dönmelidir) hiçbir belgeleri iade ve düzeltmeye nasıl bilmiyorum:

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "2016-*", 
      "fields": ["name", "season"] 
     } 
    } 
} 

Veya:

POST myindex 
POST myindex/mytype 
    { 
     "name":"t-shirt", 
     "season": "2016-3" 
    } 

Ve arama o.

Mümkün olduğunca genel olmak istiyorum çünkü bu bir örnektir, ancak belgelerimin çok fazla alanı var ve bir kullanıcı sözdiziminde sınırlama olmaksızın istediğini arayabiliyor.

cevap

0

"analyze_wildcard": true (varsayılan değer yanlıştır) kullanıyorum ve aynı sorguda - ve * ile arama yaptığımda döndürülen sıfır doküman sorununu çözdüm.

Not: "fields": ["_all"] (veya belirtme) arasında farklı bir davranış vardır ve adlarıyla birlikte tüm alanları belirtin (örneğin "fields": ["name", "season"]). En eksiksiz testlerimde denedim.

0

name alan standard analyzer ile analiz ve size shirt* arayabilirsiniz aşağıdaki _analyze sorgusu yerine

curl -XGET localhost:9200/test/_analyze?pretty -d 't-shirt' 
{ 
    "tokens" : [ { 
    "token" : "t", 
    "start_offset" : 0, 
    "end_offset" : 1, 
    "type" : "<ALPHANUM>", 
    "position" : 0 
    }, { 
    "token" : "shirt", 
    "start_offset" : 2, 
    "end_offset" : 7, 
    "type" : "<ALPHANUM>", 
    "position" : 1 
    } ] 
} 

ile görebilir ve bazı alırsınız olarak iki belirteçleri, yani t ve shirt üretilmiştir

POST myindex/_search 
{ 
    "query": { 
     "query_string": { 
      "query": "shirt*" 
     } 
    } 
} 
+0

Evet, bunu iyi biliyorum, ancak kullanıcıya "t" ve "-" – maxv15

+0

Tamam ile arama yapamayacağını açıklayamıyorum, o zaman belki de [beyaz alan analizörü] kullanılarak bu alan için özel bir eşleme oluşturmanız gerekir. Girdinizi kesik çizgilerle değil de tire ile belirtmek için https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-whitespace-analyzer.html). – Val

+0

Sorun, beyaz boşluk analizörü – maxv15

0

sonuçları deneyin wildcard query

POST myindex/_search 
{ 
    "query": { 
    "wildcard": { 
     "season": { 
     "value": "2016-*" 
     } 
    } 
    } 
} 
İlgili konular