我可以根据预期的数据提升Lucene查询解析器结果吗?

时间:2016-08-16 16:46:42

标签: asp.net lucene

我有一个Lucene索引,其中一个索引字段包含一个标识内容类型的字符串。

为简单起见,请说此字段名为_type,且只会包含typeonetypetwo

我正在使用Lucene查询解析器语法来查询此索引。说我的查询是:

(+fieldone:term^3.0 +classname:term^2.0)

是否可以对此进行扩展,以提升typeone字段中_type的所有结果,同时仍返回typetwo条记录(尽管相关性得分较低)?

更新

我发现了一种有效的语法,但它使用了通配符'所有文档'我怀疑的语法效率不高。建议表示赞赏。

(+fieldone:term^3.0 +classname:term^2.0) +(*:* _type:typeone^1.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.您可以根据需要修改该查询。