如何在ElasticSearch中正确搜索属性/字段名称中包含空格的文档?

时间:2015-12-03 21:13:35

标签: search curl elasticsearch

我相信我在搜索属性/字段名称中包含空格的字符串时遇到问题。

我使用curl命令成功批量加载一些人/人记录:

curl -XPOST localhost:9200/enterprise/person/_bulk --data-binary  @./JSON_DATA/people1.json

数据如下:

{"index":{}}
{"Last Name": "Doe", "First Name": "Jane", "my_ID": "Person:=Jane Doe", "Age": "21"}
{"index":{}}
{"Last Name": "Smith", "First Name": "Joe", "my_ID": "Person:=Joe Smith", "Age": "23"}
{"index":{}}
{"Last Name": "Smiley", "First Name": "Bob", "my_ID": "Person:=Bob Smiley", "Age": "52"}
{"index":{}}
{"Last Name": "Doe", "First Name": "John", "my_ID": "Person:=John Doe", "Age": "32"}

我可以成功搜索所有文档记录,并查看它们是否在索引中。

然而,我尝试专门搜索任何有字符串" jane"在属性"名字"使用以下curl命令:

curl -XGET 'http://localhost:9200/enterprise/person/_search?q="First Name":jane'

这失败并带有声明:

curl: (52) Empty reply from server

我认为问题与我的查询语法有关,以及我如何在字符串" First Name"中表示空格。但是,我不知道如何正确修复它。

我还尝试使用%20搜索来代表空间,使用以下命令:

curl -XGET 'http://localhost:9200/enterprise/person/_search?q=first%20name:jane'

在这种情况下,我得到了不同的结果,但它似乎仍然没有找到她,因为她在搜索中显示所有结果:

{"took":4,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}

非常感谢任何帮助。 - 谢谢。

1 个答案:

答案 0 :(得分:1)

事实证明,更安全的搜索方式是使用查询和匹配命令,如下所示:

curl -XGET 'http://localhost:9200/enterprise/person/_search?pretty' -d '{
  "query": { "match": { "First Name": "Jane" } } 
}'

这确保不必处理URL中的空格等特殊字符。