如果我想搜索我可以使用的索引:
$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列表,这样当我需要文档的突出显示部分时,我可以在特定文档上运行突出显示的查询并返回突出显示的部分。在此先感谢您的帮助!
答案 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。