【问题标题】:Search within single document using Elasticsearch使用 Elasticsearch 在单个文档中搜索
【发布时间】:2015-01-06 02:12:32
【问题描述】:

如果我想搜索我可以使用的索引:

$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 列表,以便当我需要文档的突出显示部分时,我可以在 特定文档 上运行突出显示的查询并取回突出显示的部分。在此先感谢您的帮助!

【问题讨论】:

    标签: search elasticsearch


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      您可以在 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。

      【讨论】:

        猜你喜欢
        • 2012-10-22
        • 2014-06-25
        • 2023-03-23
        • 2017-10-21
        • 1970-01-01
        • 2021-05-20
        • 2019-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多