使用`field`查询不返回

时间:2017-02-24 16:34:22

标签: elasticsearch

我是弹性搜索的新手,我的查询遇到了麻烦。

当我做一场比赛时,我得到了这个;

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "failed": 0
  },
  "hits": {
    "total": 5,
    "max_score": 1,
    "hits": [{
        "_index": "stations",
        "_type": "station",
        "_id": "4432",
        "_score": 1,
        "_source": {
          "SiteName": "Abborrkroksvägen",
          "LastModifiedUtcDateTime": "2015-02-13 10:34:20.643",
          "ExistsFromDate": "2015-02-14 00:00:00.000"
        }
      },
      {
        "_index": "stations",
        "_type": "station",
        "_id": "9110",
        "_score": 1,
        "_source": {
          "SiteName": "Abrahamsberg",
          "LastModifiedUtcDateTime": "2012-03-26 23:55:32.900",
          "ExistsFromDate": "2012-06-23 00:00:00.000"
        }
      }
    ]
  }
}

我的搜索查询如下:

{
  "query": {
    "query_string": {
      "fields": ["SiteName"],
      "query": "a"
    }
  }
}

问题在于,当我运行上面的查询时,我得到空的结果,这很奇怪。我应该收到索引中的两份文件,对吗?

我做错了什么?我的数据索引错误了还是我的查询搞砸了?

感谢我能得到的任何帮助。谢谢你们!

2 个答案:

答案 0 :(得分:2)

您的数据或查询都没有错。您似乎不了解数据如何存储在elasticsearch中!

首先,当您索引数据("SiteName": "Abborrkroksvägen""SiteName": "Abrahamsberg")时,它们将作为单独的分析术语存储。

当您使用"query":"a"(means here you are looking for the term "a" )查询ES时,它会查找是否与术语a匹配,但由于没有任何条款,因此您将获得空结果。

当您使用"query":"a*"(means all terms starts with "a")查询ES时,它会按预期返回给您。

希望这能澄清你的问题!

答案 1 :(得分:0)

另外,您可以查看我最近发现的有关搜索的文章 - https://www.timroes.de/2016/05/29/elasticsearch-kibana-queries-in-depth-tutorial/