2016-03-21 12 views
1

python requests kullanarak elasticsearch sorguya çalışıyorum. this post ardından, aşağıdaki işlemi kullanıyorum: python isteklerinde kaçan alıntılarla Elasticsearch sorgulama

params = { 
    "query": { 
     "filtered": { 
      "query": { 
       "bool": { 
        "should": [ 
         { 
          "query_string": { 
           "query": r'\"text in quotes\"' 
          } 
         } 
        ] 
       } 
      }, 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "range": { 
           "@timestamp": { 
            "from": 1458581389860, 
            "to": 1458494989000 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    }, 
    "size": 100, 
} 
response = requests.get(url, params=params) 

Maalesef sorguda tırnak işareti düzgün elasticsearch için kaçtı olmak görünmüyor. Ben de denedim şu şekildedir:

  • '\\"text in quotes\\"'
  • response = requests.get(url, data=json.dumps(params))

çalışır eşdeğer bukle, görünür:

curl -XGET 'MYURL/_search?pretty' -d '{ 
    "query": { 
     "filtered": { 
      "query": { 
       "bool": { 
        "should": [ 
         { 
          "query_string": { 
           "query": "\"test in quotes\"" 
          } 
         } 
        ] 
       } 
      }, 
      "filter": { 
       "bool": { 
        "must": [ 
         { 
          "range": { 
           "@timestamp": { 
            "from": 1458581389860, 
            "to": 1458494989000 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    }, 
    "size": 100, 
}' 
+0

''\\' metninde tırnaklar \\" ''ile aynıdır" r "\" tırnak içindeki metin \ "' –

+0

Ben de öyle düşündüm. Değer iletildikten sonra dizeye bir şeyler yapması istenebilir mi? – Luke

+0

Belki olabilir ama neden olduğunu bilmiyorum. Python elasticsearch kütüphanesini kullanmaya çalıştınız mı? –

cevap

0

Python örneğinde kullanılan uri'nın http'a gittiği ortaya çıkar, oysa curl örneğinin uri değeri https'dur. Aşağıdaki değişikliklerle çalışır:

  • http - kısmen önce çalışıyordu neden anlamıyorum response = requests.get(url, data=json.dumps(params))

veri olarak sorgu gönderilen> http

  • dize
  • '"text in quotes"' olarak , 100 vuruş iade edildi.

  • 1

    cURL olarak, tırnak kaçmaktadır. "\"text in quotes\"", ve bu "text in quotes" haline gelecektir.

    Python sorununuz, ile yaptığınız gibi tek tırnak işaretleri kullanıyorsanız, kesik çizgileri içeren ham bir dize olduğundan, hiçbir şeyden kurtulmanıza gerek yoktur.

    Yani, iki seçenek vardır: Python dize için

    1. Kullanım çift tırnak ve "\"text in quotes\""
    2. Sadece dize ise '"text in quotes"'
    +0

    Bu, denediğim ilk yaklaşım. Belki de string isn' Sorun. – Luke

    0

    kaçışsız çift tırnak ile tek tırnak kaçış sorun değil, karakter kodlamasına dikkat edin. Yönetmeye çalışın ve UTF-8'i kullanın.