2013-02-10 69 views
1

SQL服務器可以查詢使用IN運算符,如特定的ID:IN操作符lucene.net

ID in (2,23,122,44,22) 

我用的是相同的查詢在另一個頁面顯示相關結果。我必須移動到lucene.net以提高顯示速度,所以我需要替換上面使用的舊代碼。我在谷歌上搜索了很多,但沒有找到任何替代方案。

我試着在lucene.net組成布爾查詢,如:

ID:1 OR ID:2 OR ID:3 

...但由於1024個表達式限制,我無法用這種方式了。請建議我如何解決這個問題。

+0

我沒有使用lucene,而是使用彈性搜索,而不是在lucene之上。我會通過向我的對象/類型添加一個字段來處理這個問題。我會保持這個字段是最新的,它會是一個布爾值。如果ID是你提到的那個,那麼它將包含一個「true」;如果它不是其中之一,則包含「false」。如果「按值計算」每個查詢更改,那麼您可能會遇到困難。 – 2013-02-10 06:01:25

回答

0

默認情況下,布爾查詢中的最大子句數爲1024。

您可以增加此限制。

雖然會有性能損失。或者您可以對文檔中的值進行索引並搜索它們(lucene將對具有相同名稱的不同字段執行OR操作)。

可以使用上BooleanQuery類的靜態屬性來更改限制:

BooleanQuery.MaxClauseCount = 99999; 

歐米

+0

嗨Omri,我該如何增加這個限制?請提供示例代碼。 – Ravi 2013-02-11 10:42:34

+0

感謝您的幫助... – Ravi 2013-02-12 08:44:14

+0

請注意,這是不恰當的請人投票或接受你的答案。 – 2013-02-13 14:33:27

0

默認情況下,查詢中的所有條款都默認或運算:

ID: 1 2 3 

這將返回帶有ID 1,2和3的所有文檔的列表。

您可以使用簡寫le查詢,

var ids = new[] { "1", "2", "3" }; 
var query = new QueryParser(version, idProperty, analyzer).Parse(string.Join(" ", ids));