2

我正在研究 ElasticSearch Server 书中的一些示例,并尝试编写一个简单的匹配查询

{ 
  "query" : { 
    "match" : {
        "displayname" : "john smith"
    }
  }
}

这给了我错误:

{\"error\":\"SearchPhaseExecutionException[Failed to execute phase [query],      
....
SearchParseException[[scripts][4]: from[-1],size[-1]: Parse Failure [Failed to parse source 
....
QueryParsingException[[kb.cgi] No query registered for [match]]; }

我也试过

{ 
    "match" : {
    "displayname" : "john smith"
    }
}

根据http://www.elasticsearch.org/guide/reference/query-dsl/match-query/上的示例

编辑:我认为我使用的远程服务器不是最新的 0.20.5 版本,因为使用“文本”而不​​是“匹配”似乎允许查询工作

我在这里看到了类似的问题:http: //elasticsearch-users.115913.n3.nabble.com/Character-escaping-td4025802.html

4

2 回答 2

4

看来我正在使用的远程服务器不是最新的 0.20.5 版本的 ElasticSearch,因此不支持“匹配”查询 - 而是“文本”,它有效

在看到此处报告的类似问题后,我得出了这个结论:http: //elasticsearch-users.115913.n3.nabble.com/Character-escaping-td4025802.html

于 2013-03-27T02:05:15.700 回答
0

您的第一个查询看起来不错,但您在请求中使用的方式可能不正确。这是一个有效的完整示例:

curl -XDELETE localhost:9200/test-idx
curl -XPUT localhost:9200/test-idx -d '{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0
        }
    },
    "mappings": {
        "doc": {
            "properties": {
                "name": {
                    "type": "string", "index": "analyzed"
                 }
            }
        }
    }
}
'
curl -XPUT localhost:9200/test-idx/doc/1 -d '{
    "name": "John Smith"
}'
curl -XPOST localhost:9200/test-idx/_refresh
echo
curl "localhost:9200/test-idx/_search?pretty=true" -d '{
    "query": {
        "match" : {
            "name" : "john smith"
        }
    }
}
'
echo
于 2013-03-27T01:45:53.513 回答