2014-03-28 56 views
0

我有一個整數數組,需要搜索Lucene索引的特定字段值屬於這個數組。Lucene - 搜索哪裏數組包含整數字段

現在我只是想着做這樣的事情(尚未測試,只是想法):

var arrayWithIds = int[] {501,828,2837,928,2882....}; 

var booleanQuery = new BooleanQuery(); 
foreach(var id in arrayWithIds) 
{ 
    var subQuery = new TermQuery(new Term("Id",NumericUtils.IntToPrefixCoded(id))); 
    booleanQuery.Add(subQuery, BooleanClause.Occur.SHOULD); 
} 

...然後我使用booleanQuery搜索

是否有任何其他方式?

我正在使用Lucene.net 2.9。由於其他依賴關係,無法升級到較新的版本。

+0

你已有的代碼有什麼問題?我知道你還沒有做,但你應該寫實際的代碼,看它是否滿足你的需求。當你對你所做的事情有疑問時來找我們。 – gunr2171

+0

#gunr2171我想知道是否有更有效的方法。我剛剛開始使用Lucene搜索引擎,對這一點我不太瞭解。想知道是否有更直接的方式來傳遞我們需要搜索的值的數組。 – Vazgun

回答

0

我傾向於將數字ID字段改爲字符串字段。看起來他們並不真正代表數字字段,而只是恰好是數字的標識符。只是一個猜測。我不喜歡不得不使用IntToPrefixCoded,因爲它只能在Lucene內部使用(因此,如果Lucene.Net使用Lucene 4.0,那麼對NumericUtils進行重要的非向後兼容更改,版)。

儘管如此,構建查詢的方式也很好。如果您通過了諸如id:(501 828 2837 928 2882)這樣的查詢,則QueryParser會產生相同的結果。

+0

謝謝#femto。是的,我有一種感覺,我需要更改索引,以便Id是一個字符串值。 – Vazgun