我有一个Lucene索引,其中一个索引字段包含一个标识内容类型的字符串。
为简单起见,请说此字段名为_type
,且只会包含typeone
或typetwo
。
我正在使用Lucene查询解析器语法来查询此索引。说我的查询是:
(+fieldone:term^3.0 +classname:term^2.0)
是否可以对此进行扩展,以提升typeone
字段中_type
的所有结果,同时仍返回typetwo
条记录(尽管相关性得分较低)?
更新
我发现了一种有效的语法,但它使用了通配符'所有文档'我怀疑的语法效率不高。建议表示赞赏。
(+fieldone:term^3.0 +classname:term^2.0) +(*:* _type:typeone^1.1)
答案 0 :(得分:1)
使用Lucene语法,您可以通过以下方式将_type boost保持为SHOULD:
+fieldone:term^3.0 +classname:term^2.0 (_type:typeone)^2
你不需要通配符。
另一种解决方案是使用eDismax查询解析器,然后您可以使用 bq 或 bf 参数来提升字段的特定值。您可以使用以下解决方案之一:
解决方案1 :您可以通过以下方式提升您的学期:
defType=edismax&bq=_type:"typeone"^3
或
解决方案2:您可以通过以下方式使用查询功能:
defType=edismax&bf=if(termfreq(_type,"typeone"),3,if(termfreq(_type,"typetwo"),2,1))
其中_type = typeone的结果被提升3,具有typetwo的结果被提升2,否则它将是1.您可以根据需要修改该查询。