2011-06-10 68 views
0

我在java索引中創建了lucene並能夠搜索。現在我希望以維持秩序的方式進行查詢。例如說,我在指數Lucene按順序查詢

1 2 3 4 5 
1 2 3 4 1 
1 2 4 3 1 
1 3 2 4 1 

我的查詢具有以下是1 3 4那麼它應該給類似的結果:

1 2 3 4 5 
1 2 3 4 1 
1 3 2 4 1 
1 2 4 3 1 

希望的問題是清楚的。

謝謝, Ravi。

回答

0

您可以使用布爾查詢並確保致電setAllowDocsOutOfOrder(true)。如果您的索引是由docid命令的,這應該限制文檔變得無序。

編輯: 您也可以使用Sort類來按索引或相關性排序進行搜索。這看起來更有用,因爲您可以在搜索中使用任何查詢類型。

+0

當我使用setAllowDocsOutOfOrder(true)時,它給出找不到符號。我錯過了什麼?此外如何排序是有用的在這裏我的查詢可以是1 4 3&在這種情況下最後檢索,即1 2 4 3 1 應該來第一。 – ravi 2011-06-10 16:03:15

+0

哦,我誤解了你的問題。現在,您似乎希望將匹配按照術語之前的術語進行排序 - 文檔中的關係與查詢中的術語順序相匹配。我曾經以爲你的意思是通過文件編號來保存命令。這聽起來像你應該定義自己的自定義評分方法。 – Atreys 2011-06-10 16:18:53

1

您可以使用span query查找非常接近且按特定順序排列的術語。訂貨條件可以放寬。關於跨度的優秀文章可以在here找到。

+0

這對我來說很好。仍然需要一種方法來查詢查詢:初始我正在使用「查詢q1 =新查詢(Version.LUCENE_CURRENT,」Id「,分析器).parse(dis.readLine());」如果我使用SpanQuery查詢將會像「SpanNearQuery q = new SpanNearQuery(new SpanQuery [] {new SpanTermQuery(new Term(」Id「,」1「)),新SpanTermQuery(新術語(」Id「,」2「 ))},5000,true);「。如何從文件中解析查詢。我的查詢長度將會是「1 2 3」或「1 3 4 5」等。 – ravi 2011-06-29 11:35:58