2010-11-15 29 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