LexicalHighlighter
LexicalHighlighter 用于为搜索结果中文本字段的术语高亮配置后处理。高亮会使用可自定义标签标注匹配的片段,并可返回基于片段的摘要,以提升可读性和 UI 渲染效果。它不会影响检索、过滤、排序或评分。
class pymilvus.LexicalHighlighter
构造函数
初始化一个与搜索和标量过滤配合使用的高亮器配置。
LexicalHighlighter(
highlight_query: Optional[List] = None,
highlight_search_text: Optional[bool] = None,
pre_tags: Optional[List[str]] = None,
post_tags: Optional[List[str]] = None,
fragment_offset: Optional[int] = None,
fragment_size: Optional[int] = None,
)
参数:
-
highlight_query (list[dict]) -
定义对基于文本的过滤器中的哪些查询词进行高亮。每个条目都必须是一个 dict:python[{"type": "<QueryType>", "field": "<text field name>", "text": "<terms to highlight>"},{...},]如果未设置,则不会高亮任何过滤词。
有关详细信息,请参见 Text Highlighter。
-
highlight_search_text (bool) -
是否高亮 BM25 全文搜索中使用的搜索词。如果为 True,则使用 BM25 查询词作为高亮词的来源。如果未设置,则不会高亮 BM25 搜索词。 -
pre_tags (list[str]) -
在返回的高亮结果中插入到每个匹配词之前的标签。支持普通字符串(例如{)或 HTML 安全标记(例如<em>、<mark>)。如果提供多个标签,则会按匹配顺序轮换使用这些标签。 -
post_tags (list[str]) -
在每个匹配词之后插入的标签,与pre_tags配对使用。提供多个标签时,轮换顺序与 pre_tags 相同。 -
fragment_offset (int) -
返回基于片段的输出时,在第一个高亮匹配项之前保留的前置上下文字符数。默认行为是不保留额外的前置上下文。 -
fragment_size (int) -
每个返回片段的最大长度(以字符计)。高亮器会将片段长度大致限制在此大小内。 -
num_of_fragments (int) -
每个文本值返回的最大片段数。如果未设置,默认返回多个片段(实现默认值;典型取值请参见示例)。
返回类型:
LexicalHighlighter
返回:
一个 LexicalHighlighter 对象。
示例
在 BM25 全文搜索中高亮搜索词:
from pymilvus import MilvusClient, LexicalHighlighter
highlighter = LexicalHighlighter(
pre_tags=["{"],
post_tags=["}"],
highlight_search_text=True,
)
results = client.search(
collection_name="your_collection",
data=["test"], # BM25 query term
anns_field="sparse_vector",
limit=10,
search_params={"metric_type": "BM25", "params": {"drop_ratio_search": 0.0}},
output_fields=["text"],
highlighter=highlighter,
)
在 Text Match 中高亮查询词:
from pymilvus import MilvusClient, LexicalHighlighter
highlighter = LexicalHighlighter(
pre_tags=["<mark>"],
post_tags=["</mark>"],
highlight_query=[{"type": "TextMatch", "field": "text", "text": "my doc"}],
)
results = client.search(
collection_name="your_collection",
data=["test"], # BM25 can be combined
anns_field="sparse_vector",
limit=10,
search_params={"metric_type": "BM25", "params": {"drop_ratio_search": 0.0}},
output_fields=["text"],
highlighter=highlighter,
)