2013-11-23 62 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”,则可以使用前缀查询。否则,你应该使用匹配查询或类似的东西。