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

How do I search within an list of strings in Elastic Search?

我的数据有一个字段 localities,它是一个字符串数组。

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

我应该编写什么查询来按特定位置过滤文档,例如 "Rohini"?

一个简单的 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 中非常重要的主题,对您的查询方式有很大影响。

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

或者您可以简单查询:

GET /_search?q=localities:Rohini