Elasticsearch没有json查询的结果

时间:2013-11-23 16:57:48

标签: json elasticsearch

我正在学习弹性搜索并继续学习本教程。我将三个文档上传到索引中。当我提供以下查询时:

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

我按预期得到了对象2和对象3。但是,当我尝试使用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
 }'

3 个答案:

答案 0 :(得分:1)

prefix-query“匹配包含具有指定前缀(未分析)的字段的字段”。

请注意“未分析”部分。 Lucene正在寻找在索引中以“Jon”开头的任何东西,但标准分析仪会降低术语。也就是说,“jon”在索引中,但“Jon”不在。

因此,如果你的前缀查询中的文本小写,它应该工作。这是一个可运行的示例:https://www.found.no/play/gist/7629456

答案 1 :(得分:0)

尝试:

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

在任何情况下,如果您不熟悉elasticsearch,我建议您阅读文档,因为有很多类型的查询。此外,查询结果还取决于您如何索引文档,如何定义映射等等。

答案 2 :(得分:0)

要使用前缀查询,您需要点击未分析的字段。在driver.name的映射中,如果将“index”设置为“not_analyzed”,则可以使用前缀查询。否则,您应该使用匹配查询或类似的东西。