2009-10-08 46 views
1

我有一個從數據庫填充的Lucene索引。我存儲/索引一些字段,然後添加一個FullText字段,在該字段中索引所有其他字段的內容,以便我可以進行一般搜索。Lucene - 在不同的字段中搜索幾個術語

現在讓我們假設我有以下兩個字段的文檔: FLD1 - 「三星發佈新的22英寸的液晶屏」 FLD2 - 「索尼愛立信的手機電池爆炸」

如果用戶執行「三星手機」,他可能只是想要關於三星手機的消息,而不是關於三星屏幕和索尼手機信息的文檔,但是在FullText字段中搜索,我會將其作爲有效結果。 有沒有一種很好的方法來處理這個問題?

我和一些分離想到索引和做一個SpanNotQuery,所以全文領域會有這樣的內容: 「三星發佈新的22英寸的液晶屏MYLUCENESEPARATOR索尼愛立信手機的電池爆炸」,然後做一個SpanNotQuery與MYLUCENESEPARATOR作爲非生成項。

這是一個很好的解決方案嗎?它有兩個以上的條件,可以擴展嗎?我擔心這會是一個表現殺手。有沒有更好的方法來實現這一目標?

回答

2

如果字段數量有限,可以將兩個描述字符串放在兩個不同的字段中。然後,您可以使用MultiFieldQueryParser在這些字段上進行搜索。由於這些是兩個單獨的字段,因此只有當這兩個術語出現在具有AND運算符的單個字段中時,該文檔纔會匹配。

讓我們來看看你的例子。 FLD1 - 「三星發佈新的22英寸的液晶屏」 FLD2 - 「索尼愛立信的手機電池爆炸」

如果這些在不同領域的索引FLD1 & FLD2,查詢變得

(+fld1:samsung +fld1:phone) (+fld2:samsung +fld2:phone) 

萬事查詢可以幫助您輕鬆構建這樣的查詢,以便您不需要重複查詢多個字段。

+0

我接受了你的答案,但忘了投票了。也許有點晚了,但現在就做了:-) – raven 2010-07-09 13:13:43

+0

謝謝你,海梅。 – 2010-07-10 03:24:41