2010-11-15 66 views
1

我遇到了Lucene的Term [Boosting] [1]查询语法问题,特别是在Ruby on Rails中,通过sunspot_rails gem。这样您可以在查询过程中指定特定词的权重,并且与特定字段的权重无关。Lucene提升太阳黑子轨道

太阳黑子生成的HTML查询使用qf参数指定要配置的字段以及查询本身的q参数。将脱字符添加到搜索词以指定提升(即q = searchterm^5)时,即使结果没有提升词返回,也不会返回结果。

另一方面,如果我手动创建HTTP查询并手动指定要搜索的字段(q = title_texts:searchterm^5),则结果会返回并且分数会受到提升的影响。

简而言之,看起来好像查询条件提升与用qf指定的字段不起作用。

我的应用程序需要使用与这些字段相关的各自的提升在几个字段中进行搜索,并有条件地依次提升查询的单个条件。

任何见解?

[1]:http://lucene.apache.org/java/2_9_1/queryparsersyntax.html#Boosting一个期限

回答

1

我发现的解决方案是使用DisMax,但用布尔字符串与其中的升压术语添加BQ参数。

2

太阳黑子用来全文检索,其避开了通常Lucene的查询语法,取而代之的是局限于(但用户输入友好)查询语法与一组组合的dismax解析器可以由客户端应用程序构建的附加参数(如qf)来调整搜索的工作方式。黑子提供了使用boost_fields方法在全文DSL每场升压支持:

http://outoftime.github.com/sunspot/docs/classes/Sunspot/DSL/Fulltext.html#M000129

+0

谢谢,我现在看到,dismax是Lucene查询语法的一个子集。不幸的是,我需要提高查询中的条款,而不是文档的字段。是否有其他查询解析器允许跨字段进行查询? – aceofspades 2010-11-16 04:11:06

+0

您可以多次使用全文块,在每个字段中执行查询,以不同的方式进行提升,等等 - 是否适合您的用例? – outoftime 2010-11-16 18:26:22

+0

我没有意识到太阳黑子只支持dismax。感谢这两个响应,但我需要能够指定每个字段的提升以及传入查询的任意条件。后者似乎需要指定单个字段名称,而lucene分析器则需要dismax。 – aceofspades 2010-11-18 01:45:55