我有一个 UUID 字段,以以下格式添加到我的文档中:372d325c-e01b-432f-98bd-bc4c949f15b8。但是,当我尝试通过 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")
甚至使用 TermQuery 完全跳过 QueryParser,如下所示:
new TermQuery(new Term("uuid", uuid.toString()))
Or
new TermQuery(new Term("uuid", QueryParser.escape(uuid.toString())))
这些搜索都不会返回文档,但如果我搜索 UUID 的部分内容,它将返回文档。例如,这些将返回一些内容:
+uuid:372d325c
+uuid:e01b
+uuid:432f
我应该如何索引这些文档,以便可以通过它们的 UUID 将它们拉回?我考虑过重新格式化 UUID 以删除连字符,但尚未实施。
我让它工作的唯一方法是使用 WhitespaceAnalyzer 而不是 StandardAnalyzer。然后使用 TermQuery 像这样:
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_36, new WhitespaceAnalyzer(Version.LUCENE_36))
.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND);
writer = new IndexWriter( directory, config);
然后搜索:
TopDocs docs = searcher.search(new TermQuery(new Term("uuid", uuid.toString())), 1);
WhitespaceAnalyzer 阻止 Lucene 用连字符分割 UUID。另一种选择可能是消除 UUID 中的破折号,但使用 WhitespaceAnalyzer 也能满足我的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)