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個表達式限制,我無法用這種方式了。請建議我如何解決這個問題。
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個表達式限制,我無法用這種方式了。請建議我如何解決這個問題。
默認情況下,布爾查詢中的最大子句數爲1024。
您可以增加此限制。
雖然會有性能損失。或者您可以對文檔中的值進行索引並搜索它們(lucene將對具有相同名稱的不同字段執行OR操作)。
可以使用上BooleanQuery類的靜態屬性來更改限制:
BooleanQuery.MaxClauseCount = 99999;
歐米
默認情況下,查詢中的所有條款都默認或運算:
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));
我沒有使用lucene,而是使用彈性搜索,而不是在lucene之上。我會通過向我的對象/類型添加一個字段來處理這個問題。我會保持這個字段是最新的,它會是一個布爾值。如果ID是你提到的那個,那麼它將包含一個「true」;如果它不是其中之一,則包含「false」。如果「按值計算」每個查詢更改,那麼您可能會遇到困難。 – 2013-02-10 06:01:25