Span 查询 #
你可以使用 span 查询来执行精确的位置搜索。Span 查询是低级别的、特定的查询,它们提供了对指定查询词顺序和邻近度的控制。它们主要用于搜索法律文件和专利。
Span 查询包括以下查询类型:
- Span 包含:返回包含较小 span 的较大 span。用于在更广泛的上下文中查找特定的词或短语。与 span_within 查询相反。
- Span 字段掩码:允许 span 查询跨不同字段工作,通过使一个字段表现为另一个字段。当相同的文本使用不同的分词器索引时,特别有用。
- Span 前序匹配:匹配在字段开头指定位置范围内的词项或短语。适用于查找文本开头的内容。
- Span 多词项:使多词项查询(如
prefix
、wildcard
或fuzzy
)能在 span 查询中工作。允许在 span 搜索中实现更灵活的匹配模式。 - Span 临近查询:查找彼此之间出现指定距离的词项或短语。可以要求匹配按特定顺序出现,并控制它们之间可以出现多少个词。
- Span 排除查询:排除与另一个 span 查询重叠的匹配。适用于查找词项,但它们不在特定短语或上下文中出现。
- Span 或查询:匹配满足所提供任意 span 查询条件的文档。使用 OR 逻辑组合多个 span 模式。
- Span 词项查询:span 查询的基本构建块。匹配单个词,同时保留位置信息以用于其他 span 查询。
- Span 包含于:返回被较大 span 包围的较小 span。与 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. "
}