使用 Elasticsearch 在单个文档中搜索

Search within single document using Elasticsearch

如果我想搜索一个索引,我可以使用:

$curl -XGET 'X/index1/_search?q=title:ES'

如果我想搜索文档类型,我可以使用:

$curl -XGET 'X/index1/docType1/_search?q=title:ES'

但是如果我想搜索特定文档,这不起作用:

$curl -XGET 'X/index1/docType1/documentID/_search?q=title:ES'

是否有解决此问题的简单方法,以便我可以在单个文档而不是整个索引或整个文档类型中进行搜索?为了解释我为什么需要这个,我必须进行一些资源密集型查询才能找到我要找的东西。找到我需要的文档后,我实际上不需要整个文档,只需要与查询匹配的突出显示部分。但我不想将所有突出显示的命中存储在内存中,因为我可能几个小时都不需要它们,有时它们会占用很多 space(我也不想将它们写入磁盘).我宁愿存储一个文档 ID 列表,这样当我需要文档的突出显示部分时,我可以只对 特定文档 运行突出显示的查询并取回突出显示的部分。在此先感谢您的帮助!

您可以将文档的 ID 作为字段编制索引,然后在查询时将唯一的文档 ID 作为术语包含在内,以将结果范围缩小到该单个文档。

'$curl -XPOST 'X/index1/docType1/_search' -d '{
    "query": {
        "bool": {
              "must":[
                  {"match":{"doc":"223"}},
                  {"match":{"title":"highlight me please"}}
               ]
        }
   }
}'

您可以使用 Ids Query in Elasticsearch to search on a single document. Elasticsearch by default, indexes a field called _uid,它是 typeid 的组合,这样它可用于查询、聚合、脚本和排序。

所以你需要的查询如下

curl -XGET 'X/index1/_search' -d '{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "title": "ES"
          }
        },
        {
          "ids": {
            "type" : "docType1",
            "values": [
              "documentID"
            ]
          }
        }
      ]
    }
  }
}'

如果您需要搜索多个文档,则在 ids 查询的值数组中指定 doc_ids。