使用Elasticsearch在单个文档中搜索

时间:2015-01-06 02:12:33

标签: search 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'

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

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

您可以使用Elasticsearch中的Ids Query来搜索单个文档。默认情况下,Elasticsearch会将名为 _uid 的字段编入索引,该字段是 type id 的组合,以便可用于查询,聚合,脚本和排序。

所以你需要的查询如下

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

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