我有一個UUID字段,我以以下格式添加到我的文檔中:372d325c-e01b-432f-98bd-bc4c949f15b8。但是,當我嘗試通過UUID查詢文檔時,無論如何嘗試轉義表達式,它都不會返回它們。例如:在lucene中搜索UUID不起作用
+uuid:372d325c-e01b-432f-98bd-bc4c949f15b8
+uuid:"372d325c-e01b-432f-98bd-bc4c949f15b8"
+uuid:372d325c\-e01b\-432f\-98bd\-bc4c949f15b8
+uuid:(372d325c-e01b-432f-98bd-bc4c949f15b8)
+uuid:("372d325c-e01b-432f-98bd-bc4c949f15b8")
而且連QueryParser的完全使用TermQuery像這樣跳繩:
new TermQuery(new Term("uuid", uuid.toString()))
或者
new TermQuery(new Term("uuid", QueryParser.escape(uuid.toString())))
沒有這些搜索將返回一個文件,但如果我搜索它將返回一個文檔的UUID部分。例如,這些將返回的東西:
+uuid:372d325c
+uuid:e01b
+uuid:432f
我應該怎麼做索引這些文件,所以我可以將他們拉回來的UUID?我考慮重新格式化UUID以刪除連字符,但我還沒有實現它。
你是否檢查該字段是如何獲取索引的?是否有可能uuid被lucene標記器拉開? – jtahlborn
現在這裏是我如何將UUID添加到索引:doc.add(新字段(「uuid」,id.toString(),Field.Store.YES,Field.Index.NOT_ANALYZED))。我對另一個項目使用完全相同的方案,它的工作原理很好,但不同之處在於其他項目中的ID不是UUID,也不包含連字符。 – chubbsondubs
如果該字段未被分析(因此未被標記),那麼以下不應查詢應該返回空+ uuid:372d325c。 一般規則是確保您使用相同的分析器進行索引和搜索。 您是否確認使用Field.Index.NOT_ANALYZED進行索引,然後使用新的TermQuery(新術語(「uuid」,uuid.toString())) 進行搜索時會返回空? –