QueryElevationComponent:查询提升组件
查询提升组件允许您为给定的查询配置最佳结果,而不管正常的 Lucene 评分如何。
这有时被称为“赞助搜索”,“编辑提升”或“最佳匹配”。此组件将用户查询文本与配置的顶层结果映射进行匹配。文本可以是任何字符串或非字符串的 ID,只要它被索引。尽管此组件可以与任何QueryParser一起使用,但最适合与DisMax或eDisMax一起使用。
查询提升组件也支持分布式搜索。
本节中使用的所有示例配置和查询都假定您正在运行 Solr 的 techproducts 示例,如下:
bin/solr -e techproducts
配置查询提升组件
您可以在 solrconfig.xml 文件中配置查询提升组件。类似 QueryElevationComponent 的搜索组件可能会被添加到任何请求处理程序;这里使用了一个专门的请求处理程序。
<searchComponent name="elevator" class="solr.QueryElevationComponent" >
<!-- pick a fieldType to analyze queries -->
<str name="queryFieldType">string</str>
<str name="config-file">elevate.xml</str>
</searchComponent>
<requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy">
<lst name="defaults">
<str name="echoParams">explicit</str>
</lst>
<arr name="last-components">
<str>elevator</str>
</arr>
</requestHandler>
或者,在“查询提升组件”配置中,还可以指定以下内容以将编辑结果与“正常”结果区分开来:
<str name="editorialMarkerFieldName">foo</str>
查询提升搜索组件采用以下参数:
- queryFieldType 参数
-
指定应使用哪个 fieldType 来分析传入的文本。例如,使用 LowerCaseFilter 的 fieldType 可能是合适的。
- config-file 参数
-
定义查询提升的文件的路径。该文件必须存在于
<instanceDir>/conf/<config-file>
或<dataDir>/<config-file>
。如果文件存在于conf/
目录中,它将在启动时加载一次。如果它存在于data/
目录中,它将被重载为每个 IndexReader。 - forceElevation 参数
-
默认情况下,该组件遵守所请求的
sort
参数:如果请求要求按日期排序,它将按日期排序结果。如果为forceElevation=true
(默认),结果将首先返回提升的文档,然后按日期排序。
elevate.xml文件
提升查询结果可以在 config-file 参数中指定的外部 XML 文件中进行配置。一个 elevate.xml 文件可能看起来像这样:
<elevate>
<query text="foo bar">
<doc id="1" />
<doc id="2" />
<doc id="3" />
</query>
<query text="ipod">
<doc id="MA147LL/A" /> <!-- put the actual ipod at the top -->
<doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
</query>
</elevate>
在这个例子中,查询 “foo bar” 将首先返回文档1,2和3,然后是对同一个查询通常出现的任何情况。对于查询 “ipod”,它将首先返回 “MA147LL / A”,并确保 “IW-02” 不在结果集中。
如果要升级的文档没有在 elevate.xml 文件中定义,则应该在查询时使用 elevateIds 参数传入。
使用查询提升组件
enableElevation 参数
对于调试,查看有和没有提升的文档的结果可能是有用的。要隐藏结果,请使用 enableElevation=false:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=true
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=false
forceElevation 参数
您可以在运行时通过添加 forceElevation=true 到查询网址来强制提升:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&enableElevation=true&forceElevation=true
独有的参数
您可以强制 Solr 通过添加 exclusive=true 到 URL 来仅返回在提升文件中指定的结果:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&debugQuery=true&exclusive=true
文档转换器和 markExcludes 参数
该 [elevated] 文档转换器可用于对每个文档进行注释,并提供有关是否提升的信息:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&fl=id,[elevated]
同样,在故障排除时查看所有匹配的文档 (包括提升配置通常会排除的文档) 也很有用。这可以通过使用 markExcludes = true 参数,然后使用 [excluded] 转换器:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&markExcludes=true&fl=id,[elevated],[excluded]
elevateIds和excludeIds 参数
在使用提升组件时,可以在请求时重写预先配置的查询高程列表,以使用这些请求参数中指定的唯一键。
例如,在下面的请求中,文件 3007WFP 和 9885A004 将被提升,文件 IW-02 将被排除 - 无论在 elevate.xml 中为查询“cable”配置了哪些提升或排除:
http://localhost:8983/solr/techproducts/elevate?q=cable&df=text&excludeIds=IW-02&elevateIds=3007WFP,9885A004
如果在请求时指定了这些参数中的任何一个,则将忽略查询的整个提升配置。
例如,在下面的请求文件中,IW-02 和 F8V7067-APL-KIT 将被提升,并且不会排除任何文档 - 无论在 elevate.xml 中为查询 “ipod” 配置了什么样的提升或排除:
http://localhost:8983/solr/techproducts/elevate?q=ipod&df=text&elevateIds=IW-02,F8V7067-APL-KIT
具有提升的 fq 参数
查询提升尊重标准过滤器查询(fq)参数。也就是说,如果查询包含 fq 参数,即使 elevate.xml 将其他文档添加到结果集,所有结果也将在该过滤器内。