如何在Elasticsearch中的字符串列表中进行搜索?

时间:2015-03-12 13:26:59

标签: elasticsearch

我的数据有一个字段属性,这是一个字符串数组。

"localities": [
"Mayur Vihar Phase 1",
"Paschim Vihar",
"Rohini",
"",
"Laxmi Nagar",
"Vasant Vihar",
"Dwarka",
"Karol Bagh",
"Inderlok"  ]

我应该写什么查询来过滤特定地区的文件,例如" Rohini"?

2 个答案:

答案 0 :(得分:1)

简单的match查询就足够了(如果您不知道localities字段的映射)。

POST <your index>/_search
{
  "query": {
    "match": {
      "localities": "Rohini"
    }
  }
}

如果localities字段设置为string类型而index字段设置为not_analyzed,则查询此字段的最佳方法是使用term过滤器,包含在filtered查询中(不能直接使用过滤器):

POST <your index>/_search
{
  "query": {
    "filtered": {
      "filter": {
        "term": {
          "localities": "Rohini"
        }
      }
    }
  }
}

如果你不需要得分,那么第二个解决方案是可行的方法,因为过滤器不会计算分数,更快和缓存。

查看文档以获取有关分析的信息,这是ElasticSearch中非常重要的主题,严重影响您的查询方式。

答案 1 :(得分:0)

POST /_search
{
  "query": {
    "match": {
      "localities": "Rohini"
    }
  }
}

或者您可以简单地查询:

GET /_search?q=localities:Rohini