创建索引映射
首先,必须创建目标索引的映射 —— 包含模型根据你的文本创建的标记的索引。 目标索引必须有一个具有 rank_features 字段类型的字段来索引 ELSER 输出。
PUT my-index { "mappings": { "properties": { "ml.tokens": { "type": "rank_features" }, "text_field": { "type": "text" } } } }
注意:
包含预测的字段是 rank_features 字段。
用于创建稀疏向量表示的 text 字段。
使用推理处理器创建摄取管道
创建一个带有推理处理器的摄取管道,以使用 ELSER 对管道中摄取的数据进行推理。
PUT _ingest/pipeline/elser-v1-test { "processors": [ { "inference": { "model_id": ".elser_model_1", "target_field": "ml", "field_map": { "text": "text_field" }, "inference_config": { "text_expansion": { "results_field": "tokens" } } } } ] }
text_expansion 推理类型需要在推理摄取处理器中使用。
加载数据
在此步骤中,你将加载稍后在推理摄取管道中使用的数据,以从中提取 token。
使用 msmarco-passagetest2019-top1000 数据集,它是 MS MACRO Passage Ranking 数据集的子集。 它包含 200 个查询,每个查询都附有相关文本段落的列表。 所有独特的段落及其 ID 都已从该数据集中提取并编译成一个 tsv 文件。
通过推理摄取管道摄取数据
通过使用 ELSER 作为推理模型的推理管道重新索引数据,从文本创建 tokens。
POST _reindex?wait_for_completion=false { "source": { "index": "test-data", "size": 182469 }, "dest": { "index": "my-index", "pipeline": "elser-v1-test" }
使用 text_expansion 查询进行语义搜索
要执行语义搜索,请使用 text_expansion 查询,并提供查询文本和 ELSER 模型 ID。 下面的示例使用查询文本 “How to avoid muscle soreness after running?”:
GET my-index/_search { "query":{ "text_expansion":{ "ml.tokens":{ "model_id":".elser_model_1", "model_text":"How to avoid muscle soreness after running?" } } } }
上面搜索的结果是:
结果是根据相关性排序的 my-index 索引中与你的查询文本含义最接近的前 10 个文档。 结果还包含为每个相关搜索结果提取的 token 及其权重。
将语义搜索与其他查询相结合
你可以将 text_expansion 与复合查询中的其他查询结合使用。 例如,在布尔或全文查询中使用过滤器子句,可能会或可能不会使用与 text_expansion 查询相同的查询文本。 这使你能够合并来自两个查询的搜索结果。
来自 text_expansion 查询的搜索命中往往得分高于其他 Elasticsearch 查询。 这些分数可以通过使用 boost 参数增加或减少每个查询的相关性分数来规范化。 text_expansion 查询的召回率可能很高,因为相关性较低的结果很长。 使用 min_score 参数修剪那些不太相关的文档。
GET my-index/_search { "query": { "bool": { "should": [ { "text_expansion": { "ml.tokens": { "model_text": "How to avoid muscle soreness after running?", "model_id": ".elser_model_1", "boost": 1 } } }, { "query_string": { "query": "toxins", "boost": 4 } } ] } }, "min_score": 10 }
说明:
text_expansion 和 query_string 查询都在 bool 查询的 should 子句中。
text_expansion 查询的提升值为 1,这是默认值。 这意味着该查询结果的相关性分数没有提高。
query_string 查询的提升值为 4。 此查询结果的相关性分数增加,导致它们在搜索结果中排名更高。
仅显示分数等于或高于 10 的结果。
最后编辑:admin 更新时间:2023-11-29 18:18