使用Elasticsearch在单个文档中进行搜索

6

如果我想查询一个索引,我可以使用以下方法:

$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'

有没有简单的方法可以让我在单个文档中搜索而不是整个索引或整个文档类型?为了解释我需要这个的原因,我必须进行一些资源密集型查询来找到我需要的内容。一旦我找到所需的文件,我实际上并不需要整个文档,只需要匹配查询的突出部分即可。但我不想将所有突出显示的内容存储在内存中,因为我可能在几个小时后才需要它们,有时它们可能占用大量空间(我也不想将它们写入磁盘)。我宁愿存储一个文档 ID 列表,这样当我需要文档的突出部分时,我只需在特定文档上运行突出显示查询,并返回突出显示的部分。谢谢您的帮助!
2个回答

8
您可以将文档的id作为一个字段进行索引,然后在查询时,包括唯一的文档id作为一个术语来缩小结果,仅针对单个文档。
'$curl -XPOST 'X/index1/docType1/_search' -d '{
    "query": {
        "bool": {
              "must":[
                  {"match":{"doc":"223"}},
                  {"match":{"title":"highlight me please"}}
               ]
        }
   }
}'

0

您可以在Elasticsearch中使用Ids Query来搜索单个文档。 Elasticsearch默认索引一个名为_uid的字段,它是typeid的组合,因此它可用于查询、聚合、脚本和排序。

所以你需要的查询如下:

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接