【问题标题】:How to properly search for documents in ElasticSearch that have spaces in attribute/field names?如何在 ElasticSearch 中正确搜索属性/字段名称中有空格的文档?
【发布时间】:2015-12-03 21:13:34
【问题描述】:

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

我使用 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"}

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

然后,我尝试使用以下 curl 命令专门搜索属性“名字”中具有字符串“jane”的任何人:

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

声明失败:

curl: (52) Empty reply from server

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

我还尝试使用%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":[]}}

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

【问题讨论】:

    标签: search curl elasticsearch


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-18
      • 2020-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-25
      • 2017-10-21
      相关资源
      最近更新 更多