包含 Span 查询
span_containing
查询用于查找匹配项,其中较大的文本模式(如短语或一组单词)在其边界内包含较小的文本模式。可以将其理解为在特定的较大上下文中查找单词或短语。
例如,您可以使用 span_containing
查询执行以下搜索:
- 查找单词“quick”,但仅限于它出现在同时提及狐狸和行为的句子中。
- 确保某些词语出现在其他词语的上下文中,而不仅仅是文档中的任何位置。
- 搜索出现在较大有意义短语中的特定单词。
示例
要尝试本节中的示例,请完成设置步骤。
以下查询搜索在包含“silk”和“dress”单词(不一定按此顺序)且彼此之间相距不超过 5 个单词的较大跨度中出现的单词“red”:
GET /clothing/_search
{
"query": {
"span_containing": {
"little": {
"span_term": {
"description": "red"
}
},
"big": {
"span_near": {
"clauses": [
{
"span_term": {
"description": "silk"
}
},
{
"span_term": {
"description": "dress"
}
}
],
"slop": 5,
"in_order": false
}
}
}
}
}
该查询匹配文档 1,因为:
- 它找到一个跨度,其中“silk”和“dress”出现在彼此之间最多 5 个单词的范围内(“...dress in red silk...”)。词语“silk”和“dress”之间相距 2 个单词(它们之间有 2 个单词)。
- 在这个更大的跨度内,它找到了词语“red”。
响应
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 1.1577396,
"hits": [
{
"_index": "clothing",
"_id": "2",
"_score": 1.1577396,
"_source": {
"description": "Beautiful long dress in red silk, perfect for formal events."
}
}
]
}
}
little
和 big
参数都可以包含任何类型的跨度查询,从而在需要时允许复杂的嵌套跨度查询。
参数
下表列出了 span_containing
查询支持的所有顶级参数。所有参数均为必需。
参数 | 数据类型 | 描述 |
---|---|---|
little | 对象 | 必须包含在 big 跨度内的跨度查询。这定义了您在较大上下文中搜索的跨度。 |
big | 对象 | 定义 little 跨度必须出现在其边界内的包含跨度查询。这为您的搜索建立了上下文。 |