我有一个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())) 进行搜索时会返回空? –