2013-11-23 63 views
2

我正在學習elasticsearch並跟隨本教程。我將三個文件上傳到索引中。當我提供以下查詢時:Elasticseach沒有結果爲json查詢

curl 'localhost:9200/vehicles/_search?query=driver.name:Jon' 

我按預期返回對象二和對象三。然而,當我嘗試使用JSON查詢:

curl localhost:9200/vehicles/_search -d' 

{ 
    "query":{ 
     "prefix":{ 
      "driver.name":"Jon" 
}}}' 

我沒有得到任何結果回來。我正在密切關注該教程,因此我不明白問題所在。任何幫助將非常感激。上傳的對象如下。

謝謝!

id:one 
'{ 
    "color": "green", 
    "driver": { 
     "born":"1989-09-12", 
     "name": "Ben" 
}, 
    "make": "BMW", 
    "model": "Aztek", 
    "value": 3000.0, 
    "year": 2003 
}' 

id:two 
'{ 
    "color": "black", 
    "driver": { 
     "born":"1934-09-08", 
     "name": "Jon" 
    }, 
    "make": "Mercedes", 
    "model": "Benz", 
    "value": 10000.0, 
    "year": 2012 
}' 

id:three 
'{ 
    "color": "green", 
    "driver": { 
     "born":"1934-09-08", 
     "name": "Jon" 
    }, 
    "make": "BMW", 
    "model": "Benz", 
    "value": 10000.0, 
    "year": 2012 
}' 

回答

1

prefix-query「與包含具有指定前綴(未分析)的術語的字段的文檔匹配」。

注意「未分析」 - 部分。 Lucene正在尋找索引中以「Jon」開頭的任何內容,但標準分析器會降低條件。也就是說,「jon」在索引中,但「Jon」不是。

因此,如果你在你的前綴查詢中使用小寫字母,它應該可以工作。這是一個可運行的示例:https://www.found.no/play/gist/7629456

+0

謝謝!這就是它。搜索'jon'就像一個魅力。 –

0

嘗試:

curl -XGET "http://localhost:9200/vehicles/_search" -d ' 
{ 
    "query": {"query_string" : { "query" : "driver.name:Jon" }} 
}' 

在任何情況下,如果你是新來elasticsearch我真的建議你閱讀文檔,因爲有很多類型的查詢。此外,查詢的結果還取決於如何爲文檔建立索引,如何定義映射等。

0

爲了使用前綴查詢,您需要點擊非分析字段。在driver.name的映射中,如果將「index」設置爲「not_analyzed」,則可以使用前綴查詢。否則,你應該使用匹配查詢或類似的東西。