Span 查询
您可以使用跨度查询来执行精确的位置搜索。跨度查询是低级、具体的查询,可以控制指定查询词的顺序和邻近度。它们主要用于搜索法律文件和专利。
跨度查询包括以下查询类型:
-
Span containing(包含跨度):返回包含其内部较小跨度的较大跨度。适用于在更广泛的上下文中查找特定词语或短语。与
span_within
查询相反。 -
Span field masking(跨度字段掩码):允许跨度查询通过将一个字段显示为另一个字段来跨不同字段工作。当使用不同分析器索引相同文本时,此功能特别有用。
-
Span first(首次跨度):匹配在字段开头指定位置数内出现的词语或短语。适用于查找文本开头的内容。
-
Span multi-term(多词元跨度):使多词元查询(如
prefix
、wildcard
或fuzzy
)能够在跨度查询中工作。允许在跨度搜索中使用更灵活的匹配模式。 -
Span near(邻近跨度):查找彼此之间在指定距离内出现的词语或短语。您可以要求匹配项以特定顺序出现,并控制它们之间可以有多少个词语。
-
Span not(非跨度):排除与另一个跨度查询重叠的匹配项。适用于查找未出现在特定短语或上下文中的词语。
-
Span or(或跨度):匹配满足任何给定跨度查询的文档。使用 OR 逻辑组合多个跨度模式。
-
Span term(词元跨度):跨度查询的基本组成部分。匹配单个词元,同时保留位置信息以用于其他跨度查询。
-
Span within(内部跨度):返回由较大跨度包围的较小跨度。与
span_containing
查询相反。
设置
要尝试本节中的示例,请使用以下步骤配置示例索引。
步骤 1:创建索引
首先,为电子商务服装网站创建一个索引。description
字段使用默认的 standard
分析器,而 description.stemmed
子字段应用 english
分析器以启用词干提取。
PUT /clothing
{
"mappings": {
"properties": {
"description": {
"type": "text",
"analyzer": "standard",
"fields": {
"stemmed": {
"type": "text",
"analyzer": "english"
}
}
}
}
}
}
步骤 2:索引数据
将示例文档索引到索引中
POST /clothing/_doc/1
{
"description": "Long-sleeved dress shirt with a formal collar and button cuffs. "
}
POST /clothing/_doc/2
{
"description": "Beautiful long dress in red silk, perfect for formal events."
}
POST /clothing/_doc/3
{
"description": "Short-sleeved shirt with a button-down collar, can be dressed up or down."
}
POST /clothing/_doc/4
{
"description": "A set of two midi silk shirt dresses with long sleeves in black. "
}