繁体   English   中英

使用ElasticSearch匹配多个文档

[英]Matching across Multiple documents with ElasticSearch

我对ElasticSearch比较陌生。 我将其用作pdf文档的搜索平台。 我将PDF分为文本页面,然后将每个页面作为带有相应页面ID,父信息等的elasticSearch记录输入。

我发现困难的是不仅将给定查询匹配到ES中的单个文档,还要使其匹配具有相同父ID的任何文档。 因此,如果搜索两个术语,并且该术语存在于实际PDF文档的第1页和第7页(在ES中有2个单独的条目),我想匹配此结果。

本质上,我的目标是能够搜索单个PDF的多个页面,在PDF中的任何文档页面上进行匹配,并为搜索结果返回匹配的PDF文档列表,而不是匹配“页面” ”

您将需要在页面上使用“ has_child”查询。 我假设您已经为文档和页面的父/子关系定义了映射。 然后,您可以编写一个“ has_child”查询来搜索页面(子类型),但返回PDF文档(父类型):

{
  "query": {
    "has_child": {
      "type": "your_pages_type",
      "score_type": "max", // read document for more
      "query": {
        "query_string": {
          "query": "some text to search",
          "fields": [
            "your_pages_body"
          ],
          "default_operator": "and" // "and" if you want to search all words, "or" if you want to search any of words in query
        }
      }
    }
  }
}

这有点棘手。 首先,您必须自己将查询拆分成多个字词。 有一个术语列表(比如foobarbaz ,您可以针对表示PDF的类型(父类型)创建一个布尔查询,如下所示:

{
    "bool" : {
        "must" : [{
            "has_child" : {
                "type": "page",
                "query": {
                    "match": {
                        "page_body": "foo"
                    }
                }
            }
        }, {
            "has_child" : {
                "type": "page",
                "query": {
                    "match": {
                        "page_body": "bar"
                    }
                }
            }
        }, {
            "has_child" : {
                "type": "page",
                "query": {
                    "match": {
                        "page_body": "baz"
                    }
                }
            }
        }]
   }
}

该查询将为您找到每个术语至少包含一页的所有PDF。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM