我正在学习弹性搜索并继续学习本教程。我将三个文档上传到索引中。当我提供以下查询时:
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
}'
答案 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”,则可以使用前缀查询。否则,您应该使用匹配查询或类似的东西。