由于索引现在配备了 ELSER 嵌入,因此可以更改app.py中的handle_search() 函数来搜索这些嵌入。现在,您将看到如何仅通过 ELSER 进行搜索,稍后将把以前的搜索方法整合回去,创建一个组合解决方案。
要在搜索时使用 ELSER 推断,需要使用text_expansion 查询类型。下面是使用该查询更新后的handle_search() 函数:
text_expansion 查询接收一个包含要搜索字段名称的键。在该键下,model_id 配置搜索中使用的模型,model_text 定义搜索的内容。请注意,在这种情况下不需要为搜索文本生成嵌入,因为 Elasticsearch 会管理模型并处理该问题。
在上述版本的handle_search() 中,filters 没有使用,聚合也省略了。这些内容可以以同样的方式添加回全文检索解决方案中。下面是更新后的handle_search() 函数,它将text_expansion 查询移至bool.must 部分,在bool.filter 中加入了过滤器,并像以前一样添加了聚合。
花一些时间尝试不同的搜索方式。您会注意到,与密集向量嵌入一样,当索引文档中没有出现确切单词时,ELSER 模型驱动的搜索比全文搜索效果更好。